我正在使用 django allauth 身份验证系统,我使用带有“next”参数的社交注册,如下所示:
<a data-provider="facebook"
href="{% provider_login_url "facebook" method="oauth2" next=next %}">
其中 next 是一个动态变量。
但是,我想为该过程注入(inject)第二个屏幕,询问电话号码或其他信息。
我想我需要重写一个方法来重定向到第二个屏幕并将下一个参数传递给这个 View 。
知道要覆盖哪种方法吗?
编辑:
我想出了如何为“正常”注册流程做到这一点:
我覆盖了 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()
然后将自定义 View 添加到我自己的帐户/注册 url 文件中。
但是我在 中找不到该方法社交 注册 View 。有人知道在社交注册 View 中评估下一个参数的位置吗?
编辑2:
所以我做了一些挖掘。该标志用于 sociallogin 类方法:
@classmethod
def state_from_request(cls, request):
if next_url:
state['next'] = next_url
return state
之后,它通过提供者传递给帮助者 complete_social_login 或 complete_social_signup (尚不确定何时调用)。
最后有一个函数 account/utils perform_login 实际执行重定向。
目前还不确定在哪里覆盖,仍在挖掘。
所以最后是:
socialaccount View 调用 helpers.complete_social_signup,然后使用重定向 url 调用完整注册。
我认为我必须覆盖该 View ,然后通过我自己的完整社交注册方法。
编辑3:
如果您启用了自动注册(我这样做),则永远不会调用 SocialSignup ClassView,而是在 socialaccount.helpers._process_signup 中创建新用户。
最佳答案
结束了 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犯罪。
关于django - 将第二个注册屏幕添加到社交注册 allauth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42040601/