Django allauth Перенаправить на подтверждение по электронной почте после регистрации в социальной сети
Я использую Твиттер для основной регистрации / входа и хочу перенаправить на ссылку "учетные записи / электронная почта" после регистрации в социальной сети, потому что я хочу заставить нового пользователя предоставлять свои электронные письма. Я нашел тот же вопрос и ответ от Anzel
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
class SocialAccountAdapter(DefaultSocialAccountAdapter):
def save_user(self, request, sociallogin, form=None):
super(DefaultSocialAccountAdapter, self).save_user(request, sociallogin, form=form)
return redirect('/accounts/email/')
но ответ не сработал для меня и получил это
AttributeError at /accounts/twitter/login/callback/
'super' object has no attribute 'save_user'
Request Method: GET
Request URL: http://localhost:8000/accounts/twitter/login/callback/?oauth_token=HSowSgAAAAAAuTblAAABVrLCOpE&oauth_verifier=cVrwyB2Vfk2Lgsrwg5fqE0wyzrfnwJ3H
Django Version: 1.9.2
Exception Type: AttributeError
Exception Value:
'super' object has no attribute 'save_user'
2 ответа
Решение
В setting.py я только добавил эти две строки и забыл про адаптер:
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_EMAIL_REQUIRED = True
и теперь после регистрации или входа он перенаправляет новых пользователей только в / account / social / signup /, и это представление фактически вынуждает пользователя отправлять свой eamil и процесс для проверки.
добавьте этот код в api/init.py
from django.shortcuts import redirect
from allauth.exceptions import ImmediateHttpResponse
@receiver(user_signed_up)
def social_signed_up(request, user, **kwargs):
social_account = SocialAccount.objects.filter(user=user).first()
if social_account:
raise ImmediateHttpResponse(
redirect("https://example.com/foo/")
)