即使存在社交帐户,也可以使用Django-All-auth进行注册,然后自动连接两个



所以,如果已经存在,我已经能够连接与本地电子邮件帐户连接的社交帐户(FB或Google)。

但是,我也想要反向功能,即,即使存在(Google或FB)社交帐户,我也希望允许用户注册。目前说:

{用户已经在此电子邮件地址注册了}

我正在使用django all-auth和django-rest-auth与django 2.1

是的,您可以做到。您应该能够修改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发送带有链接的电子邮件,以设置用户试图注册并且已经存在电子邮件(或仅在此用户具有社交帐户的情况下)时设置密码。如果您愿意,我可以在这里添加一个示例。

相关内容

最新更新