Частичный конвейер python-social-auth не может возобновиться
Я пытаюсь собрать пароль для нового пользователя с частичным конвейером python-social-auth. По какой-то неизвестной причине я не могу возобновить конвейер, страница отображается на странице сбора паролей после отправки формы.
Что связано с тем, что даже когда я набрал http.../complete/backend-name, страница будет перенаправлена обратно на страницу сбора паролей. Похоже, что рендеринг идет в бесконечном цикле: сначала страница сбора пароля указывает на полную страницу, а вся страница сразу возвращается на страницу сбора пароля. Я проверил значение для REDIRECT_FIELD_NAME, оно "следующее".
Я не уверен, что не так с моим кодом, любые советы / предложения очень ценятся.
settings.py
SOCIAL_AUTH_PIPELINE = (
...
'accounts.pipeline.get_password',
...
)
pipeline.py
from django.shortcuts import redirect
from social.pipeline.partial import partial
@partial
def get_password(strategy, details, user=None, is_new=False, *args, **kwargs):
if is_new:
return redirect('accounts_signup_social')
else:
return
views.py
def get_password(request):
if request.method == 'POST':
request.session['password'] = request.POST.get('password')
backend = request.session['partial_pipeline']['backend']
return redirect('social:complete', backend=backend)
return render_to_response('accounts/social_signup.html',{"form":SocialSignUpForm}, RequestContext(request))
1 ответ
Хорошо. Я нашел проблему и решение.
Как сказано в документации: "Трубопровод возобновит работу с той же функцией, что и процесс". по адресу http://python-social-auth.readthedocs.org/en/latest/pipeline.html. Это означает, что он всегда будет возвращаться к одной и той же функции.
Решение состоит в том, чтобы добавить проверку сеанса для пароля в конвейере. Вернитесь к следующему конвейеру, если пароль заархивирован:
трубопровод:
from django.shortcuts import redirect
from social.pipeline.partial import partial
@partial
def get_password(strategy, details, user=None, is_new=False, *args, **kwargs):
if is_new:
if 'password' in kwargs['request'].session:
return {'password': kwargs['request'].session['psssword']}
else:
return redirect('accounts_signup_social')
else:
return