我正在使用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中创建新用户。