python oauthlib:在转义 ValueError 中“只有 unicode 对象是可转义的”
Posted
技术标签:
【中文标题】python oauthlib:在转义 ValueError 中“只有 unicode 对象是可转义的”【英文标题】:python oauthlib: in escape ValueError "Only unicode objects are escapable" 【发布时间】:2014-11-04 03:21:08 【问题描述】:我正在使用python-social-auth
从我的 Django 应用程序登录社交网络。在我的本地机器上一切正常,但是当我部署到服务器时出现以下错误:
oauthlib.oauth1.rfc5849.utils in escape
ValueError: Only unicode objects are escapable. Got None of type <type 'NoneType'>.
堆栈跟踪:
File "django/core/handlers/base.py", line 112, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "social/apps/django_app/utils.py", line 45, in wrapper
return func(request, backend, *args, **kwargs)
File "social/apps/django_app/views.py", line 12, in auth
return do_auth(request.social_strategy, redirect_name=REDIRECT_FIELD_NAME)
File "social/actions.py", line 25, in do_auth
return strategy.start()
File "social/strategies/base.py", line 66, in start
return self.redirect(self.backend.auth_url())
File "social/backends/oauth.py", line 99, in auth_url
token = self.set_unauthorized_token()
File "social/backends/oauth.py", line 158, in set_unauthorized_token
token = self.unauthorized_token()
File "social/backends/oauth.py", line 177, in unauthorized_token
method=self.REQUEST_TOKEN_METHOD)
File "social/backends/base.py", line 202, in request
response = request(method, url, *args, **kwargs)
File "requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "requests/sessions.py", line 349, in request
prep = self.prepare_request(req)
File "requests/sessions.py", line 287, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "requests/models.py", line 291, in prepare
self.prepare_auth(auth, url)
File "requests/models.py", line 470, in prepare_auth
r = auth(self)
File "requests_oauthlib/oauth1_auth.py", line 87, in __call__
unicode(r.url), unicode(r.method), None, r.headers)
File "oauthlib/oauth1/rfc5849/__init__.py", line 293, in sign
request.oauth_params.append(('oauth_signature', self.get_oauth_signature(request)))
File "oauthlib/oauth1/rfc5849/__init__.py", line 128, in get_oauth_signature
uri, headers, body = self._render(request)
File "oauthlib/oauth1/rfc5849/__init__.py", line 199, in _render
headers = parameters.prepare_headers(request.oauth_params, request.headers, realm=realm)
File "oauthlib/oauth1/rfc5849/utils.py", line 31, in wrapper
return target(params, *args, **kwargs)
File "oauthlib/oauth1/rfc5849/parameters.py", line 57, in prepare_headers
escaped_value = utils.escape(value)
File "oauthlib/oauth1/rfc5849/utilsy", line 56, in escape
'Got %s of type %s.' % (u, type(u)))
来自requirements.txt
文件的一些包:
Django==1.6.6
google-api-python-client==1.1
oauth2==1.5.211
oauthlib==0.6.3
python-openid==2.2.5
python-social-auth==0.1.26
requests==2.4.0
requests-oauthlib==0.4.1
six==1.7.3
【问题讨论】:
您使用的是什么版本的 Python?我怀疑是什么原因造成的,但我不能 100% 确定。 @sigmavirus24 这是 Python 2.7.6。在同一台机器上,我有另一个使用python-social-auth
的 Django 项目,它工作得非常好。
我认为不同之处可能在于locale
设置,但考虑到您有一个不同的应用程序使用它,这非常奇怪。我不熟悉这些项目是否有帮助,但我会向 requests-oauthlib 的维护者指出,看看他们是否可以提供帮助。
@sigmavirus24 感谢您的帮助!我检查了locale
,它是en_US.UTF-8
。由于两个 Django 项目都在同一台服务器上运行,它们共享相同的locale
,但一个项目运行良好,另一个项目运行不佳。
同样的问题,正在尝试升级 Django 1.7。谷歌建议设置文件中的变量名有问题,但当然,正确的变量名当然不会显示在任何地方。
【参考方案1】:
当我没有在我的 django 设置文件中提供我的 OAuth 使用者密钥和机密时,我收到了这个错误。它本质上是一个“找不到所需的设置”错误。是否值得检查部署时成功复制的所有设置?
【讨论】:
谢谢!错误消息非常混乱,所以我查看了所有地方,除了settings.py
中的变量名称。【参考方案2】:
我已经升级到 python-social-auth 并且在 Linkedin 登录时遇到了同样的问题。设置中的参数名称在最新版本中已更改,因此: LINKEDIN_CONSUMER_KEY 和 LINKEDIN_CONSUMER_SECRET 将被使用:SOCIAL_AUTH_LINKEDIN_KEY 和 SOCIAL_AUTH_LINKEDIN_SECRET。
【讨论】:
【参考方案3】:如果这句话有拼写错误,问题来了:
tweepy.OAuthHandler(consumer_key,consumer_secret)
【讨论】:
以上是关于python oauthlib:在转义 ValueError 中“只有 unicode 对象是可转义的”的主要内容,如果未能解决你的问题,请参考以下文章
Flask python setup:安装时的oauthlib版本问题
Listrak Invalid Credentials 错误使用 Python requests_oauthlib
Python 快速入门 ModuleNotFoundError:没有名为“google_auth_oauthlib”的模块
python 需要pip包:requests,requests_oauthlib
Python 如何从使用 oauthlib 的帐户身份验证获取 ID_Token 以与 Open ID Connect 一起使用
python 有关如何将Flask与requests-oauthlib一起使用以使用OAuth 2令牌获取GitHub用户配置文件的示例。