В настоящее время я разрабатываю serverbackand с Django (1.7), который должен обрабатывать аутентификацию через социальные сети, используя python-social-auth. Я следил за Tutorial на этом сайте, в котором описывается процесс простого Webapp. Это отлично работало для входа в Google и Twitter.
Поскольку сервер должен быть просто REST-FULL Backend, я решил получить токен доступа на стороне клиента и отправить его на сервер. Сервер будет аутентифицироваться вместе с ним. Этот процесс не должен быть проблемой и даже приведен в качестве примера в документах python-social-auth.
Однако, если я все сделаю, я получу ошибку, которая говорит: "Backend not Found 404".
Здесь минимальная часть проекта:
settings.py: (Я также включил API_KEY и SECRET)
AUTHENTICATION_BACKENDS = (
#'social.backends.facebook.FacebookOAuth2',
'social.backends.google.GoogleOAuth2',
'social.backends.twitter.TwitterOAuth',
'django.contrib.auth.backends.ModelBackend',
)
views.py(для просмотра аутентификации)
from django.contrib.auth import login
from social.apps.django_app.utils import psa
@psa('social:complete')
def register_by_access_token(request, backend):
token = request.GET.get('access_token')
user = request.backend.do_auth(request.GET.get('access_token'))
if user:
login(request, user)
return 'OK'
else:
return 'ERROR'
Это я скопировал пролив из документов и только изменил backend.do_auth на request.backend.do_auth. Это, кажется, ошибка в документах.
urls.py:
...
url(r'^register-by-token/(?P<backend>[^/]+)/$', 'register_by_access_token')
...
Также, как указано в документах.
Я просто попытался заставить это работать только для google-oauth, потому что есть простой js-lib, который дает вам токен доступа. Это также сработало довольно хорошо, и я отправляю запрос на
GET http://localhost:8000/register-by-token/google-oauth2/<access-token>/
Как описано выше, возврат был 404 Бэкэнд не найден. Я немного отлаживал и выяснил, что ошибка возникает в функции входа, а не в функции do_auth() бэкэнд. Для этого выполняется настоящий процесс аутентификации. Я также попытался использовать случайную сгенерированную строку в качестве токена и получил соответствующую ошибку, что пользователь не может быть аутентифицирован.
Самое забавное, что у пользователя даже есть бэкенд, который содержит "social.backends.google.GoogleOAuth2", как и должно быть.
Спасибо, если вы останетесь со мной на длинный пост, и я надеюсь, что у кого-то есть идея, что может быть неправильным:). Ждем ваших ответов.