【问题标题】:Error in getting OAuth authentication url获取 OAuth 身份验证 URL 时出错
【发布时间】:2012-11-15 22:15:13
【问题描述】:

我在一个 Python 桌面应用程序中有以下代码,它在使用 AppHarbor API 之前授权用户。我正在按照knowledge base 中提到的步骤操作,并拥有以下验证码:

 def OnAuthenticate(self, event):
    client_id = "" # My App's client id
    client_secret_key = "" # My App's secret key
    consumer = oauth2.Consumer(key=client_id, secret=client_secret_key)

    request_token_url = "https://appharbor.com/user/authorizations/new?client_id="+client_id+"&redirect_uri=http://localhost:8095"

    client = oauth2.Client( consumer )
    resp, content = client.request(request_token_url, "GET")
    ...

但是,在发送请求时,响应不正确,这是错误:

client.request(request_token_url, "GET")
TypeError: must be string or buffer, not None

这里有什么我遗漏的吗?


编辑:以下是抛出的堆栈跟踪:

    resp, content = client.request(request_token_url, "GET")
    File "C:\Python27\Lib\site-packages\oauth2-1.5.211-py2.7.egg\oauth2\__init__.py", line 682, in request
    connection_type=connection_type)
    File "C:\Python27\lib\site-packages\httplib2-0.7.4-py2.7.egg\httplib2\__init__.py", line 1544, in request
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
    File "C:\Python27\lib\site-packages\httplib2-0.7.4-py2.7.egg\httplib2\__init__.py", line 1342, in _request
   (response, content) = self.request(location, redirect_method, body=body, headers = headers, redirections = redirections - 1)
    File "C:\Python27\Lib\site-packages\oauth2-1.5.211-py2.7.egg\oauth2\__init__.py", line 662, in request
    req.sign_request(self.method, self.consumer, self.token)
    File "C:\Python27\Lib\site-packages\oauth2-1.5.211-py2.7.egg\oauth2\__init__.py", line 493, in sign_request
    self['oauth_body_hash'] = base64.b64encode(sha(self.body).digest())
    TypeError: must be string or buffer, not None

在调试调用后,我到达了发出请求的 httplib2._request 函数

(response, content) = self._conn_request(conn, request_uri, method, body, headers)

这导致以下页面出现错误响应 = 302(显示在内容对象中)

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="https://appharbor.com/session/new?returnUrl=%2Fuser%
 2Fauthorizations%2Fnew%3Foauth_body_hash%3D2jmj7l5rSw0yVb%252FvlWAYkK%252FYBwk%
 253D%26oauth_nonce%3D85804131%26oauth_timestamp%3D1340873274%
 26oauth_consumer_key%3D26bacb38-ce5a-4699-9342-8e496c16dc49%26oauth_signature_method%
 3DHMAC-SHA1%26oauth_version%3D1.0%26redirect_uri%3Dhttp%253A%252F%252Flocalhost%
 253A8095%26client_id%3D26bacb38-ce5a-4699-9342-8e496c16dc49%26oauth_signature%
 3DXQtYvWIsvML9ZM6Wfs1Wp%252Fy3No8%253D">here</a>.</h2>
 </body></html>

该函数接下来从内容中删除主体以调用另一个主体设置为 None 的请求,从而导致引发错误。

(response, content) = self.request(location, redirect_method, body=body, headers = headers, redirections = redirections - 1)

【问题讨论】:

  • 您应该有一个回溯,其中包含引发异常的确切文件和行,以及完整的调用堆栈。也许你可以发布它? (或者甚至阅读它,它可能会回答你的问题)。

标签: python oauth-2.0 appharbor httplib2


【解决方案1】:

我不熟悉 Python 库,但您是否考虑过这是否是因为您需要引导用户通过 three-legged flow Twitter flow 并使用您在问题中提到的 url 作为 authorize_url?获得代码后,您可以通过 POST 到以下网址检索令牌:https://appharbor.com/tokens

您可能还想仔细查看desktop OAuth .NET sample 以更好地了解其工作原理。

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 2015-08-23
    • 2015-02-02
    • 2014-06-07
    • 2016-06-04
    • 2021-02-19
    • 2014-08-26
    • 2023-03-22
    • 2016-03-27
    相关资源
    最近更新 更多