我正在尝试修改用户从社交帐户提供商登录时显示的注册表单。
这是我的自定义注册表单代码:
from allauth.socialaccount.forms import SignupForm
from allauth.account.forms import SetPasswordField, PasswordField
class SocialPasswordedSignupForm(SignupForm):
password1 = SetPasswordField(label=_("Password"))
password2 = PasswordField(label=_("Password (again)"))
def confirm_password(self):
print('entered confirm_password')
if ("password1" in self.cleaned_data
and "password2" in self.cleaned_data):
print('password fields found')
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
print('passwords not equal')
raise forms.ValidationError(_("You must type the same password"
" each time."))
print('passwords equal')
return self.cleaned_data["password1"]
else:
print('passwords not found in form')
raise forms.ValidationError(_("Password not found in form"))
def signup(self, request, user):
print('signup in SocialPasswordedSignupForm')
password = self.confirm_password()
user.set_password(password)
user.save()
设置.py:
SOCIALACCOUNT_FORMS = {
'signup': 'users.forms.SocialPasswordedSignupForm'
}
但问题是,我的注册方法永远不会被调用,所以,confirm_password
方法也没有被调用,并且没有对密码进行验证。也就是说,如果我输入两个不同的密码,则保存第一个密码。
可能出什么问题了?
您是否设置此值 SOCIALACCOUNT_AUTO_SIGNUP = False ?这是为了确保成功验证后,用户将被重定向到您的注册表单。
我来到你的链接是因为我必须实现完全相同的功能。这就是我最后的做法。
forms.py
class SocialPasswordedSignupForm(SignupForm):
password1 = SetPasswordField(max_length=6,label=("Password"))
password2 = PasswordField(max_length=6, label=("Password (again)"))
#taken from https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py
def clean_password2(self):
if ("password1" in self.cleaned_data and "password2" in self.cleaned_data):
if (self.cleaned_data["password1"] != self.cleaned_data["password2"]):
raise forms.ValidationError(("You must type the same password each time."))
return self.cleaned_data["password2"]
def signup(self, request, user):
user.set_password(self.user, self.cleaned_data["password1"])
user.save()
我想到探索原始代码https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py并发现没有像 clean_password1() 这样的函数,但有 clean_password2() 正在执行预期的工作。所以只需按原样复制它即可,一切正常:)
如果它对您有用,请不要忘记接受它作为答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)