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

时间:2017-02-04 12:52:09

标签: django django-allauth

我正在使用django allauth auth系统,我使用社交注册" next"像这样的参数:

The parameter 'b' was not bound in the specified LINQ to Entities query expression

其中next是动态变量。

然而,我想向该过程注入第二个屏幕,要求提供一个发声号码或其他信息。

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

知道要覆盖哪种方法?

编辑: 我想出了如何为"正常"注册流程:

我覆盖了allauth.account.views.SignupView并添加了一个新方法:

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

然后将自定义视图添加到我自己的帐户/注册网址文件中。

但是我无法在社交注册视图中找到该方法。有没有人知道在社交注册视图中评估下一个参数的位置?

EDIT2:

所以我做了一些挖掘。 Flag用于社交登录类方法:

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()

之后,它将提供程序传递给helpers complete_social_login或complete_social_signup(当被调用时还不确定)。

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

目前尚未确定在何处覆盖,仍在挖掘。

最后说到:

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

我认为不得不覆盖该视图,然后通过我自己的完整社交注册方法。

EDIT3:

如果您启用了自动签名(我这样做),则永远不会调用SocialSignup ClassView,而是在socialaccount.helpers._process_signup中创建新用户。

1 个答案:

答案 0 :(得分: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提交。