环境—Python2.7.3,webpy。在
我正在尝试使用Python对github进行简单的oauth 3路身份验证网页.py. 根据github上的基本oauth指南,我正在做如下操作:
import web,requests
import oauth2,pymongo,json
from oauth2client.client import OAuth2WebServerFlow
urls=('/', 'githublogin',
'/session','session',
'/githubcallback','githubCallback');
class githublogin:
def GET(self):
new_url = 'https://github.com/login/oauth/authorize'
pay_load = {'client_id': '',
'client_secret':'',
'scope':'gist'
}
headers = {'content-type': 'application/json'}
r = requests.get(new_url, params=pay_load, headers=headers)
return r.content
这是把我送到GH登录页面。一旦我登录-GH不会将我重定向到回叫。redirect_uri参数在github应用程序中配置。我已经仔细检查过了,以确保这是正确的。在
^{pr2}$在浏览器里我看到了
http://<hostname>:8080/session
还有一条404消息,因为我还没有配置会话URL。这是第一个问题。问题2-如果我配置会话URL并打印出post消息
class session:
def POST(self):
data = web.data()
print data
def GET(self):
print "callback called"
我可以看到一些数据发布到URL上,带有一个名为“authenticity_token”的东西。在
我尝试过使用python_oauth2库,但无法通过authorization\u url调用。所以我尝试了这个更简单的请求库。有人能告诉我这里出了什么问题吗。在
我不确定您的问题是什么,但是请尝试复制下面的流程,首先手动使用浏览器,然后使用python库。它将帮助您调试该问题。在
在http://requestb.in/上创建请求bin。请求bin基本上是一个记录所有发送到它的HTTP请求的服务。您将使用它而不是回调来记录发送到回调的内容。复制请求bin的URL,类似于http://requestb.in/123a546b
转到GitHub(https://github.com/settings/applications)上的OAuth应用程序设置,输入特定应用程序的设置,并将回调URL设置为刚刚创建的请求bin的URL。
向GitHub OAuth页面发出请求,并定义客户机_id。只需在浏览器中输入以下URL,但将此处的“客户端”ID更改为OAuth应用程序的客户端ID:
https://github.com/login/oauth/authorize?client_id=YOUR_CLIENT_ID_HERE
输入用户名和密码,然后单击“授权”。然后,GitHub应用程序将重定向到您创建的request bin服务,浏览器中的URL应该类似于(注意code query参数):
http://requestb.in/YOUR_REQUEST_BIN_ID?code=GITHUB_CODE
(例如,
http://requestb.in/abc1def2?code=123a456b789cdef
)另外,浏览器中页面的内容应该是“ok”(这是请求bin服务返回的内容)。
转到您创建的请求bin页面并刷新它。现在您将看到githuboauth服务器向您发送的httpget请求的日志条目,以及所有HTTP头。基本上,您将看到与重定向到的URL中相同的code参数。如果您得到了这个参数,您现在就可以使用这个代码和您的客户机密码发出POST请求了,如您正在使用的指南的第2步所述:http://developer.github.com/v3/oauth/#web-application-flow
如果这些步骤中有任何一个给你带来麻烦,请告诉我。在
我是怎么解决这个问题的。感谢@Ivanzuzak请求B.in小费。在
我用的是pythonwebpy。在
我以前没有使用html文件,而是直接从githublogin类发送请求。那没用。这里我使用一个html来引导用户首先从哪里登录到gh。在此基础上,我添加了一个html并使用templator呈现它。在
^{pr2}$这个文件直接取自dev guide,只改变了client_id参数。在
另一点需要注意的是请求.post方法-直接传递pay_负载不起作用。必须使用json.dumps文件. 在
相关问题 更多 >
编程相关推荐