如何解决在django中,如果使用CustomForm注册,如何使用Oauth登录
我的 Django 应用有一个使用 CustomForm
(从 UserCreationForm 继承)以及 Outh
登录/注册的选项。现在的问题是,如果用户已经使用 CustomForm
注册,如果下次他尝试使用 google Oauth
登录,那么 不是登录,而是 google Oauth 重定向到某些其他注册表单(不是我创建的)看起来像:
但由于用户已经注册,如果他在此处输入相同的用户名/电子邮件,则会显示用户名已被占用。 那么我该如何解决这个问题呢?我的意思是我希望用户能够使用 Oauth
登录,即使他使用 CustomForm
注册,我该如何实现? 或者即使我要求用户填写此表单能够使用 OAuth 登录,问题是他的电子邮件/用户名已经存在于数据库中,因此他将无法使用此表单进行注册。
编辑:
如果这很难实现,那么当用户在使用 CustomForm 注册后尝试使用 oauth 登录时,我如何只显示一条消息, 类似 "You signed up using username rather than google account"
,而不是带他到社交帐户注册表单?
def register(request):
if request.method == 'POST':
form = CustomForm(request.POST or None)
if form.is_valid():
form.save()
return redirect('login')
else:
return redirect('register')
else:
return render(request,'accounts/register.html')
forms.py 看起来像这样:
class CustomForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ("username","email")
解决方法
您可以使用 pre_social_login
信号
from allauth.exceptions import ImmediateHttpResponse
from allauth.socialaccount.signals import pre_social_login
from allauth.account.utils import perform_login
from allauth.utils import get_user_model
from django.dispatch import receiver
from django.shortcuts import redirect
from django.conf import settings
@receiver(pre_social_login)
def link_to_local_user(sender,request,sociallogin,**kwargs):
email_address = sociallogin.account.extra_data['email']
User = get_user_model()
users = User.objects.filter(email=email_address)
if users:
perform_login(request,users[0],email_verification=settings.EMAIL_VERIFICATION)
raise ImmediateHttpResponse(redirect(settings.LOGIN_REDIRECT_URL))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。