我在过去的两个月里使用python social auth进行社交认证,这很棒。 我需要QQ支持,因此安装了最新的git commit(23e4e289ec426732324af106c7c2e24efea34aeb - 不是发布的一部分)。 到目前为止,我曾使用以下代码对用户进行身份验证:
# setup redirect uri in order to load strategy
uri = redirect_uri = "social:complete"
if uri and not uri.startswith('/'):
uri = reverse(redirect_uri, args=(backend,))
# load the strategy
try:
strategy = load_strategy(
request=request, backend=backend,
redirect_uri=uri, **kwargs
)
strategy = load_strategy(request=bundle.request)
except MissingBackend:
raise ImmediateHttpResponse(HttpNotFound('Backend not found'))
# get the backend for the strategy
backend = strategy.backend
# check backend type and set token accordingly
if isinstance(backend, BaseOAuth1):
token = {
'oauth_token': bundle.data.get('access_token'),
'oauth_token_secret': bundle.data.get('access_token_secret'),
}
elif isinstance(backend, BaseOAuth2):
token = bundle.data.get('access_token')
else:
raise ImmediateHttpResponse(HttpBadRequest('Wrong backend type'))
# authenticate the user
user = strategy.backend.do_auth(token)
工作得很好。
在最新版本中,此行为已更改,并且因为" load_strategy"而引发了异常。方法已经改变了。
我似乎无法找到有关如何使用新版本执行此操作的任何文档。
任何帮助将不胜感激!
欧米。
答案 0 :(得分:4)
存储库中的最后一次更改改变了strategy
的重要性,而不是执行身份验证的主要实体,它只是将框架与后端粘合的辅助类。尝试使用此代码段加载strategy
和backend
:
from social.apps.django_app.utils import load_strategy, load_backend
strategy = load_strategy(request)
backend = load_backend(strategy, backend, uri)
...
user = backend.do_auth(token)