将第二个注册屏幕添加到社交注册 allauth

8

我正在使用Django Allauth认证系统,并且我使用“next”参数进行社交登录,如下所示:

<a data-provider="facebook"
   href="{% provider_login_url "facebook" method="oauth2" next=next %}">

其中next是一个动态变量。

然而,我想在流程中注入第二个屏幕,要求输入电话号码或其他信息。

我想我需要重写一个方法来重定向到第二个屏幕,并将下一个参数传递给此视图。

有任何想法要重写哪个方法吗?

编辑: 我已经弄清楚了如何在“正常”注册流程中实现此操作:

我重写了allauth.account.views.SignupView并添加了一个新的方法:

class CustomSignupView(SignupView):
    def get_success_url(self):
        next_value = (get_next_redirect_url(self.request,
                                            self.redirect_field_name)
                      or self.success_url)
        ret = 'whatever/url?next=' + next_value
        return ret

signup = CustomSignupView.as_view()

然后将自定义视图添加到我的账户/注册url文件中。

但是我在社交注册视图中找不到该方法。有人知道下一个参数在社交注册视图中如何评估吗?

编辑2:

因此,我进行了一些挖掘。该标志在sociallogin类方法中使用:

@classmethod
def state_from_request(cls, request):
    if next_url:
        state['next'] = next_url
    return state

之后它会被传递给helpers.complete_social_login或complete_social_signup(还不确定何时调用哪个)。

最终,有一个函数account/utils perform_login实际执行重定向。

目前还不确定在哪里进行覆盖,仍在研究中。

所以最终变成了:

socialaccount视图调用helpers.complete_social_signup,然后使用重定向URL调用完整的注册过程。

我认为我将需要覆盖该视图,然后传递自己的完整的社交注册方法。

编辑3:

如果启用了自动注册(我已经启用),则SocialSignup ClassView将永远不会被调用,而是在socialaccount.helpers._process_signup中创建新用户。


你想在他们授权使用社交账号之前还是之后询问额外信息? - Andrey Shipilov
之后,我可以确认他们的社交数据并询问额外信息。 - Julian
1个回答

0
最终我决定forking django-allauth,并简单地添加了一个名为ACCOUNT_SIGNUP_REDIRECT的可调用设置。
def custom_signup_redirect(success_url):
    ret = '/whatever/url/?next=' + success_url
    return ret

然后在设置中:

ACCOUNT_SIGNUP_REDIRECT = 'myapp.utils.custom_signup_redirect'

请查看this的提交记录。


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