django-allauth - 即使社交帐户存在,也允许用户使用 django-all-auth 注册,然后自动连接两者
问题描述
因此,如果已经存在,我已经能够连接社交帐户(fb 或 google)以连接到本地电子邮件帐户。
但是,我还想要反向功能,即即使存在(google 或 FB)社交帐户,我也希望允许用户注册。目前它说:
{ 用户已使用此电子邮件地址注册}
我在 Django 2.1 中使用 django-all-auth 和 django-rest-auth
解决方案
是的,你可以这么做。您应该能够修改提供的密码重置端点django-rest-auth
以设置密码,然后能够登录:
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import PasswordResetForm as DjangoPasswordResetForm
from rest_auth.serializers import (
PasswordResetSerializer as RestAuthPasswordResetSerializer
)
from rest_auth.views import PasswordResetView as RestAuthPasswordResetView
UserModel = get_user_model()
class PasswordResetForm(DjangoPasswordResetForm):
def get_users(self, email):
"""
Given an email, return matching user(s) who should receive a reset.
"""
active_users = UserModel._default_manager.filter(**{
'%s__iexact' % UserModel.get_email_field_name(): email,
'is_active': True,
})
return iter(active_users)
# or (u for u in active_users if not u.has_usable_password())
class PasswordResetSerializer(RestAuthPasswordResetSerializer):
password_reset_form_class = PasswordResetForm
class PasswordResetView(RestAuthPasswordResetView):
serializer_class = PasswordResetSerializer
您可以将此视图添加到您的urls.py
作为通用端点以重置密码(请记住将其放在rest_auth
s 的 URL 前面)或作为附加端点来设置密码(请参阅注释行)。然后,您可以向您的注册页面添加一条注释,该注释链接到为您的新端点提供服务的页面。
作为替代方案,您还可以在用户设置页面中添加一个字段,用户可以在其中设置密码。
send_confirmation
当用户尝试注册并且电子邮件已经存在(或仅在此用户拥有社交帐户的情况下)时,您还可以发送带有链接的电子邮件以设置密码。如果您愿意,我可以在这里添加一个示例如何做到这一点。
推荐阅读
- sql - 获取每组的第一行,加上去年的相关行
- javascript - 在新的 AngularFire 7 (Firebase 9) 中实现云函数时出现未知语法错误
- ansible - 如果已创建 VM,Ansible vmware_guest customize_spec 不会更改任何内容
- python - 如何使具有多个答案的问题/答案成为可能
- python-3.x - Spacy 在 Pardo 中中断序列化 - Apache Beam
- powershell - 提示时如何将参数作为输入传递给powershell脚本?
- sqlite - 如何强制 nHibernate 自动更新引用对象?
- jupyter-notebook - 用于情节热图的交互式 zmax?
- javascript - 如何存储多个复选框的变量以供以后在同一网页上使用?
- javascript - 不同类型的位置固定但结果相同