python social auth загрузить стратегию и аутентифицировать пользователя вручную с выпуском 0.1.26
В последние 2 месяца я использовал 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 изменился.
Я не могу найти какую-либо документацию о том, как сделать это с новым выпуском.
Любая помощь будет оценена!
Омри.
1 ответ
Последние изменения в хранилище изменили важность 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)