RedTea / gtap

Automatically exported from code.google.com/p/gtap
1 stars 2 forks source link

OAuth支持 #9

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
昨晚ep给代码加上了oauth支持,不过现在的身份验证方式比较�
��琐,作者可以考虑改
进一下。

现在的用法是这样的:
1. 注册OAuth,把OAuth的callback url设置为https://xxx.appspot.com/oauth
/twitter/callback
2. 把OAuth的key和secret填入oauth.py
3. 改好app.yaml之后上传到GAE
4. 
访问https://xxx.appspot.com/oauth/twitter/login注册,完成后会显示一�
��key
5. 
设置客户端的api地址为https://xxx.appspot.com/gtap_oauth/,用户名随
意,密
码为(4)显示的key即可登录

我测试过获取/发推/删除推都没问题,不过不确定还有没有其
它bug,请慎用。

(oauth.py原始作者为tav 
(http://github.com/tav/tweetapp/),我作了部分修改)

Original issue reported on code.google.com by SAPika...@gmail.com on 20 Apr 2010 at 3:32

Attachments:

GoogleCodeExporter commented 9 years ago
不能发推是不是因为我是用sdupload上传而不是用sdk上传的原因
?我把配置文件中的安全选项
always那一行删除了。

Original comment by atfa.k...@gmail.com on 26 May 2010 at 5:39

GoogleCodeExporter commented 9 years ago
各位如果出现61楼的错误(错误信息最后三行相同)的话,请
确认修改配置的时候是修改
oauth_config.py。

如果错误信息不一样麻烦在这里贴一下。。。

allowed_users后面的双引号是笔误,应该全部用单引号。。。另�
��'other_user'只是添加多个用
户名的实例,实际上并不用添加。

Comment 101  by atfa.kris
-------------------------
删除secure: 
always理论上应该没问题,但是用sdupload就可能会出事了。可以
用官方sdk试一下
么?另外上传debug版之后展开log条目会出现很详细的信息的,
如果没有的话很可能就是
sdupload的问题。

Original comment by SAPika...@gmail.com on 26 May 2010 at 5:57

GoogleCodeExporter commented 9 years ago
Comment 102 by SAPikachu, Today (4 minutes ago) 
各位如果出现61楼的错误(错误信息最后三行相同)的话,请
确认修改配置的时候是修改
oauth_config.py。

那OAuth里的相关配置就不用改了吗?

Original comment by trigoldwong on 26 May 2010 at 6:04

GoogleCodeExporter commented 9 years ago
恩,新版本的所有配置全部放在oauth_config.py里面

Original comment by SAPika...@gmail.com on 26 May 2010 at 6:16

GoogleCodeExporter commented 9 years ago
Comment 104 by SAPikachu, Today (11 minutes ago) 
恩,新版本的所有配置全部放在oauth_config.py里面

多谢阿仔啊!!问题MS已经解决,OAuth里的我之前就改好了,�
��有再动它,然后听从你的修改
oauth_config.py里的配置文件,再到官方去验证OAuth就可以了。
Thanx sooooo much!!! <3 阿仔~ ^^

Original comment by trigoldwong on 26 May 2010 at 6:35

GoogleCodeExporter commented 9 years ago
不客气,呵呵

Original comment by SAPika...@gmail.com on 26 May 2010 at 7:12

GoogleCodeExporter commented 9 years ago
SAPikachu:

首先,刚才我用的不是debug版(后来发现你贴错后重新贴了一
个debug版),重新将debug版用
sdk上传后的确多了很多的log信息。
结果依旧是不能发推。
下面按时间顺序是一些log内容,的确有敏感信息了,哈哈。

#

   1.
      05-26 12:34AM 32.493 /gtap_oauth/statuses/update.json 401 972ms 54cpu_ms
35api_cpu_ms 0kb Seesmic,gzip(gfe)
      See details

      112.193.147.155 - - [26/May/2010:00:34:33 -0700] "POST
/gtap_oauth/statuses/update.json HTTP/1.1" 401 843 - "Seesmic,gzip(gfe)" "打
码.appspot.com"

   2.
      I 05-26 12:34AM 32.499

      ('method', 'post')

   3.
      I 05-26 12:34AM 32.499

      {'status': 'test', 'source': 'Seesmic'}

   4.
      I 05-26 12:34AM 32.951

      {'kwargs': {'status': 'test', 'oauth_version': '1.0', 'oauth_token': '打码',
'source': 'Seesmic', 'oauth_nonce': 打码, 'oauth_timestamp': 1274859272,
'oauth_signature': '打码', 'oauth_consumer_key': '打码', 
'oauth_signature_method':
'HMAC-SHA1'}}

   5.
      I 05-26 12:34AM 32.951

      {'message': 'POST&https%3A%2F
%2Ftwitter.com%2Fstatuses%2Fupdate.json&oauth_consumer_key%打码%26oauth_nonce%
打码
%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1274859272%26oauth_tok
en%3
打码%26oauth_version%3D1.0%26source%3DSeesmic%26status%3Dtest'}

   6.
      I 05-26 12:34AM 32.951

      {'ret': 'status=test&oauth_version=1.0&oauth_token=打码&source=Seesmic&
oauth_nonce=打码&oauth_timestamp=1274859272&oauth_signature=打码%3D&
oauth_consumer_key=打码&oauth_signature_method=HMAC-SHA1'}

   7.
      D 05-26 12:34AM 33.461

      {'status': '401 Unauthorized', 'x-google-cache-control': 'remote-fetch',
'set-cookie': 'k=64.233.172.20.1274859273372260; path=/; expires=Wed, 02-Jun-10
07:34:33 GMT; domain=.twitter.com, guest_id=127485927337888142; path=/; 
expires=Fri,
25 Jun 2010 07:34:33 GMT, _twitter_sess=打码; domain=.twitter.com; path=/',
'expires': 'Wed, 26 May 2010 07:39:33 GMT', 'vary': 'Accept-Encoding', 'server':
'hi', 'connection': 'close', 'via': 'HTTP/1.1 GWA', 'cache-control': 'no-cache,
max-age=300', 'date': 'Wed, 26 May 2010 07:34:33 GMT', 'content-type':
'application/json; charset=utf-8', 'www-authenticate': 'Basic realm="Twitter 
API"'}

   8.
      D 05-26 12:34AM 33.461

      {"request":"/statuses/update.json","error":"Read-only application cannot POST"}

我注意到最后以行说只读的应用不能POST,但我观察了我的twit
ter app设置,的确是read and
write的。

Original comment by atfa.k...@gmail.com on 26 May 2010 at 7:43

GoogleCodeExporter commented 9 years ago
这样的话,试试去twitter设置的connections页面把对应的token 
revoke掉,然后重新验证?如
果还不行的话,再试试整个application删掉重新建立一个?

参考:http://stackoverflow.com/questions/971369/twitter-api-oauth-cant-send-s
tatus-
updates-getting-401

Original comment by SAPika...@gmail.com on 26 May 2010 at 8:17

GoogleCodeExporter commented 9 years ago
SAPikachu:

Good!在twitter的设置中取消revoke然后重新来过就ok了。真是不可
思议!

谢谢。你的程序非常好用,速度也快。

现在纠结的就是买的VPN没用了。

Original comment by atfa.k...@gmail.com on 26 May 2010 at 8:34

GoogleCodeExporter commented 9 years ago
不客气,呵呵,这个应该是twitter系统的问题。

VPN还是有用的,可以用来翻墙什么的。GAE翻墙虽然速度不错��
�可惜HTTPS有点问题。

Original comment by SAPika...@gmail.com on 26 May 2010 at 9:00

GoogleCodeExporter commented 9 years ago
这部分代码应该可以合并入gtap主线了把,马上就只可以oauth��
�证了

Original comment by supercyp...@gmail.com on 26 May 2010 at 10:12

GoogleCodeExporter commented 9 years ago
我发现在twitbrid中的nearby功能,一用就提示请求过多。。貌似
不能用

Original comment by mallocf...@gmail.com on 28 May 2010 at 1:51

GoogleCodeExporter commented 9 years ago
Comment 112  by mallocfeng

于是麻烦用debug版试试,然后贴一下出错log。。。?注意敏感
信息打码

Original comment by SAPika...@gmail.com on 28 May 2010 at 2:11

GoogleCodeExporter commented 9 years ago
Gravity 从昨晚开始一直提示API rate limit reached.
但是如果在Gravity里添加 Status Net 账号, 在api 
base里填api地址却可以使用...
求解

Original comment by linkzero...@gmail.com on 28 May 2010 at 9:31

GoogleCodeExporter commented 9 years ago
Comment 114  by linkzerozeng
----------------------------
Gravity没用过。。。于是继续求debug版gae log。。。

Original comment by SAPika...@gmail.com on 28 May 2010 at 12:06

GoogleCodeExporter commented 9 years ago
最新的是V5 
Debug吧?什么时候能加上Gzpi压缩啊,我用Gravity配合这个API,�
��量太吓人了。

Original comment by lanhai...@gmail.com on 28 May 2010 at 2:10

GoogleCodeExporter commented 9 years ago
我同一个twitter帐号搭了两个GTAP,第一个一直使用正常,第二
个刚开始正常,到第二天就登录
不了,提示用户名密码错误或者permission 
deny,后来我登录了http://xxx.appspot.com/oauth
/twitter/login

得到如下提示:

Traceback (most recent call last):
  File
"/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__
.py",
line 511, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/xxx/1.342264016579498298/oauth.py", line 440, in get
    self.handle(service,action)
  File "/base/data/home/apps/xxx/1.342264016579498298/oauth.py", line 455, in handle
    self.response.out.write(getattr(client, action)())
  File "/base/data/home/apps/xxx/1.342264016579498298/oauth.py", line 227, in login
    return self.get_request_token()
  File "/base/data/home/apps/xxx/1.342264016579498298/oauth.py", line 243, in
get_request_token
    **dict(token.split('=') for token in token_info.split('&'))
ValueError: dictionary update sequence element #0 has length 4; 2 is required

Original comment by cowb...@gmail.com on 29 May 2010 at 3:25

GoogleCodeExporter commented 9 years ago
Comment 116  by lanhailin
---------------------------
最新版是v6,v5-debug是调试用的,如果使用没问题请不要用这�
��版本。
gzip我晚一点研究一下。

Comment 117  by cowbike
---------------------------
于是看看oauth_config.py里面的设置对不对?另外试试重新建一��
�application?

Original comment by SAPika...@gmail.com on 29 May 2010 at 5:00

GoogleCodeExporter commented 9 years ago
刚才查了一下,GAE内部是会自动进行gzip的,但是要求客户端�
��Accept-Encoding和User-Agent
里面都包含gzip。另外代码不允许自行设置Content-Encoding。

结论:必须修改客户端才能启用gzip,服务端没办法。

Original comment by SAPika...@gmail.com on 29 May 2010 at 5:13

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Gravity里开了gzip了。。可是还是每推2k  是twip的4倍。。杯具

Original comment by jiayim...@gmail.com on 29 May 2010 at 5:35

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
Comment 118 by SAPikachu, Today (4 hours ago)
Comment 116  by lanhailin
---------------------------
最新版是v6,v5-debug是调试用的,如果使用没问题请不要用这�
��版本。
gzip我晚一点研究一下。
===========================
LZ发布V5时间还靠后一些,导致我们都下了v5

Comment 122 by jiayim...@gmail.com, Today (3 hours ago)
Gravity里开了gzip了。。可是还是每推2k  是twip的4倍。。杯具
==========================
+1 我用的v5,不知道v6如何

Original comment by logi...@gmail.com on 29 May 2010 at 9:34

GoogleCodeExporter commented 9 years ago
刚才查了一下,GAE内部是会自动进行gzip的,但是要求客户端�
��Accept-Encoding和User-Agent
里面都包含gzip。另外代码不允许自行设置Content-Encoding。

结论:必须修改客户端才能启用gzip,服务端没办法。

================================================================
gae的gzip要强制的我知道。
所以我gravity开了gzip确实是twip的4倍(我不知道这个是不是可�
��这样用),没试过不开gzip
选项时候的流量会用多少,不知道有没有人比较过的呢。
还有twip是有选项可以开启gzip的不管服务器有否开压缩。这样
的话其实应该是GTAP部分加入压
缩功能就可以吧?

Original comment by four...@gmail.com on 29 May 2010 at 6:19

GoogleCodeExporter commented 9 years ago
Comment 125  by logicmd
----------------------
于是重新上传v6。。。顺便加入了新版使用说明。。。不能修
改issue真麻烦。
v6只是修改了内部认证方式,gzip之类的都和以前版本一样。

Comment 126  by fourwei
----------------------
gae的服务端架构和普通php空间不同,没办法在代码内强制开��
�gzip。要开启gzip需要客户端请
求满足#119里面说的两个条件,而一般客户端开启gzip只会增加
Accept-Encoding,而不会修改
User-Agent。我想Gravity也是这个情况。所以就导致GAE发回去的请
求不会压缩。

Original comment by SAPika...@gmail.com on 30 May 2010 at 2:58

Attachments:

GoogleCodeExporter commented 9 years ago
app.tween.yaml到底是干什么的。。?我一个app用了多个东西,所
以我改了app.yaml,app.tween.yaml的作
用我没看懂

Original comment by jiayim...@gmail.com on 30 May 2010 at 10:36

GoogleCodeExporter commented 9 years ago
呃。。。那个是给tween用的,一般客户端不用理会

Original comment by SAPika...@gmail.com on 31 May 2010 at 12:30

GoogleCodeExporter commented 9 years ago
SDUpload上传方法:
SDUpload由于使用的sdk版本较旧,不支持强制HTTPS,所以必须把a
pp.yaml内所有
secure: always的行全部删掉才能上传
===========
如果我进行这样的操作,对我后面的使用是否有影响?虽然��
�上去操作起来挺简单的

Original comment by sce...@gmail.com on 31 May 2010 at 2:08

GoogleCodeExporter commented 9 years ago
一般没什么影响,只是没有强制HTTPS的功能

Original comment by SAPika...@gmail.com on 1 Jun 2010 at 1:08

GoogleCodeExporter commented 9 years ago
我以前用google 
app支持最早那个API。听说月底twitter官方全部用oauth验证,就��
�这个直接上
传搭建,没有删除以前的。我用iphone程序试了,正常连接。��
�想知道有没有影响,是不是以前
的APP自动就删除了。

Original comment by gamerzh...@gmail.com on 1 Jun 2010 at 7:06

GoogleCodeExporter commented 9 years ago
没问题,以前的会被自动覆盖

Original comment by SAPika...@gmail.com on 1 Jun 2010 at 7:30

GoogleCodeExporter commented 9 years ago
  File "/base/data/home/apps/devinyao1/1.342358158567515791/oauth.py", line 451, in 
get_signed_body
    'oauth_consumer_key': service_info['consumer_key'],
KeyError: 'consumer_key'

报consumer_key出错,可是我的确是填了进入啊,怎么会错呢。

Original comment by Yao...@gmail.com on 1 Jun 2010 at 9:20

GoogleCodeExporter commented 9 years ago
呃。。。你填到哪里了?应该是填到oauth_config.py里面的,把��
�件内容贴一下看看?

Original comment by SAPika...@gmail.com on 1 Jun 2010 at 9:55

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
来了。。两个key删掉了一部分所以短一点..
OAUTH_APP_SETTINGS = {

    'twitter': {

        'A2dh5ItirhyovSw': '',
        '7Q2j7ussklIjdyIJL0m13y0w': '',

        'request_token_url': 'https://twitter.com/oauth/request_token',
        'access_token_url': 'https://twitter.com/oauth/access_token',
        'user_auth_url': 'https://twitter.com/oauth/authorize',

        'default_api_prefix': 'https://twitter.com',
        'default_api_suffix': '.json',

        'low_security': False,

    'allowed_users': [],
    # example: 'allowed_users': ['SAPikachu', 'other_user', ],

        },

    }

Original comment by Yao...@gmail.com on 1 Jun 2010 at 12:09

GoogleCodeExporter commented 9 years ago
访问https://xxx.appspot.com/oauth/twitter/login
显示的完整内容如下:
Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/
__init__.py", line 511, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/devinyao1/1.342360983920025983/oauth.py", line 534, in 
get
    self.handle(service,action)
  File "/base/data/home/apps/devinyao1/1.342360983920025983/oauth.py", line 549, in 
handle
    self.response.out.write(getattr(client, action)())
  File "/base/data/home/apps/devinyao1/1.342360983920025983/oauth.py", line 303, in 
login
    return self.get_request_token()
  File "/base/data/home/apps/devinyao1/1.342360983920025983/oauth.py", line 314, in 
get_request_token
    self.service_info['request_token_url'], **self.request_params
  File "/base/data/home/apps/devinyao1/1.342360983920025983/oauth.py", line 440, in 
get_data_from_signed_url
    __url, __token, __meth, **extra_params
  File "/base/data/home/apps/devinyao1/1.342360983920025983/oauth.py", line 444, in 
get_signed_url
    return '%s?%s'%(__url, self.get_signed_body(__url, __token, __meth, 
**extra_params))
  File "/base/data/home/apps/devinyao1/1.342360983920025983/oauth.py", line 451, in 
get_signed_body
    'oauth_consumer_key': service_info['consumer_key'],
KeyError: 'consumer_key'

Original comment by Yao...@gmail.com on 1 Jun 2010 at 12:11

GoogleCodeExporter commented 9 years ago

        'consumer_key': 'xxxxxxxxxxxxx',
        'consumer_secret': 'yyyyyyyyyyyyyyy',

于是应该是这样填。。。

Original comment by SAPika...@gmail.com on 1 Jun 2010 at 12:26

GoogleCodeExporter commented 9 years ago
原来填错地方了!!!已经搞定,多谢。

Original comment by Yao...@gmail.com on 1 Jun 2010 at 12:47

GoogleCodeExporter commented 9 years ago
oauth版本有个问题,不知道是twitter官方还是API设置问题。
就是我查询自己某个跟随者的跟随者名单时候,出现提示说��
�过500/小时API的使用。
我查询第二次就会出现这个提示。

Original comment by gamerzh...@gmail.com on 2 Jun 2010 at 5:11

GoogleCodeExporter commented 9 years ago
试试在api地址后面加上/1?例如https://xxx.appspot.com/gtap_oauth/1/

Original comment by SAPika...@gmail.com on 2 Jun 2010 at 6:06

GoogleCodeExporter commented 9 years ago
刚刚注意到有的朋友安装的时候先下载官方包,然后再用oauth
版覆盖,实际上如果只需要oauth
版的话,这是不需要的,直接解压oauth版安装就可以了。如果
需要和官方gtap并行使用,那还需
要把app.yaml合并起来。

Original comment by SAPika...@gmail.com on 2 Jun 2010 at 8:31

GoogleCodeExporter commented 9 years ago
后面加/1/不管怎么看跟随者列表都不会出现500/小时限制了
你俩是否考虑合作整合一个版本。反正月底官方彻底抛弃http�
��式。不如趁早。

Original comment by gamerzh...@gmail.com on 2 Jun 2010 at 9:28

GoogleCodeExporter commented 9 years ago
我是没有问题的,等作者有空直接上传到svn就可以了

Original comment by SAPika...@gmail.com on 2 Jun 2010 at 9:44

GoogleCodeExporter commented 9 years ago
我这里不能上传到GAE,错误代码在附件中,请问能帮我看看��
�怎么回事吗?谢谢!

Original comment by timroyal...@gmail.com on 2 Jun 2010 at 1:38

Attachments:

GoogleCodeExporter commented 9 years ago
出现这种问题,请问如果解决啊:(
用的是最新的那个tap-oauth-rev6-2.7z  

Traceback (most recent call last):
  File
"/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__
.py",
line 511, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/realyn/1.342397683421024983/oauth.py", line 534, in get
    self.handle(service,action)
  File "/base/data/home/apps/realyn/1.342397683421024983/oauth.py", line 549, in handle
    self.response.out.write(getattr(client, action)())
  File "/base/data/home/apps/realyn/1.342397683421024983/oauth.py", line 303, in login
    return self.get_request_token()
  File "/base/data/home/apps/realyn/1.342397683421024983/oauth.py", line 319, in
get_request_token
    **dict(token.split('=') for token in token_info.split('&'))
ValueError: dictionary update sequence element #0 has length 1; 2 is required

Original comment by rea...@gmail.com on 3 Jun 2010 at 2:12

GoogleCodeExporter commented 9 years ago
consumer 
key和secret正确填到oauth_config.py里面了么?贴一下文件内容看��
�?

Original comment by SAPika...@gmail.com on 3 Jun 2010 at 2:35

GoogleCodeExporter commented 9 years ago
搞定,之前只填了oauth.py。oauth_config.py也填上之后,没问题了
,感谢。。。。

Original comment by rea...@gmail.com on 3 Jun 2010 at 4:13

GoogleCodeExporter commented 9 years ago
Traceback (most recent call last):
  File
"/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__
.py",
line 511, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/rickyboy/3.342464176889637325/oauth.py", line 440, in get
    self.handle(service,action)
  File "/base/data/home/apps/rickyboy/3.342464176889637325/oauth.py", line 455, in handle
    self.response.out.write(getattr(client, action)())
  File "/base/data/home/apps/rickyboy/3.342464176889637325/oauth.py", line 301, in
callback
    return get_request_token()
NameError: global name 'get_request_token' is not defined

callback 返回这样的信息什么意思?

Original comment by RickyBoy...@gmail.com on 5 Jun 2010 at 11:21