Django allauth 社交注册后重定向至电子邮件验证

4

我使用Twitter作为主要的注册/登录方式,我希望在社交注册后重定向到“accounts/email”链接,因为我想强制新用户提供他们的电子邮件地址。我发现了相同的问题@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'

尝试使用super(SocialAccountAdapter, self).save_user(request, sociallogin, form=form)代替super(DefaultSocialAccountAdapter, self).save_user(request, sociallogin, form=form)。即,在SocialAccountAdapter上调用super,而不是在DefaultSocialAccountAdapter上调用。 - elethan
我已经解决了这个问题,错误不再出现。但问题在于,即使是现有用户,它仍然总是重定向到验证电子邮件的网址。 - Nazih AIT BENSAID
2个回答

4
在 setting.py 中,我只添加了这两行并忘记了适配器:
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_EMAIL_REQUIRED = True

现在,在注册或登录后,它只会将新用户重定向到/accounts/social/signup/,这个视图实际上强制用户提交他的电子邮件并进行验证。

1
将此代码添加到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/")
        )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接