django-rest-auth:电子邮件验证的目的是什么?如何让用户正确激活帐户?

时间:2019-03-22 15:59:24

标签: django django-rest-framework django-rest-auth

我可能会误会。 django-rest-auth提供了RegisterView,应该在用户注册后将一封电子邮件发送到该用户的电子邮件。但是,我注意到用户甚至在用户确认电子邮件之前就已经向is_active=True注册。那么,电子邮件验证的目的是什么?用户在网站上注册时,是否必须重写某些内容并使用is_active=False创建用户?如果是这样,我如何正确实现呢?我遇到了麻烦。

这就是我所做的。

urls.py

path('api/v1/rest-auth/registration/', include('rest_auth.registration.urls')),

serializers.py

from rest_auth.registration.serializers import RegisterSerializer

class CustomRegistrationSerializer(RegisterSerializer):

    def save(self, request):
        user = super(CustomRegistrationSerializer, self).save(request)
        user.is_active = False
        return user

settings.py

REST_AUTH_REGISTER_SERIALIZERS = {
'REGISTER_SERIALIZER': 'appname.serializers.CustomRegistrationSerializer',
}

这是我遇到的错误。

  

文件“ rest_auth / registration / views.py”,第46行,在分发中       返回super(RegisterView,self).dispatch(* args,** kwargs)

     

文件“ /rest_framework/views.py”,行495,在发送中       响应= self.handle_exception(exc)

     

handle_exception中的文件“ rest_framework / views.py”,第455行       self.raise_uncaught_exception(exc)

     

文件492中的“ rest_framework / views.py”行       响应=处理程序(请求,* args,** kwargs)

     

文件“ rest_framework / generics.py”,第192行,在帖子中       返回self.create(request,* args,** kwargs)

     

在create中的文件“ rest_auth / registration / views.py”第65行       用户= self.perform_create(序列化器)

     

perform_create中的文件“ rest_auth / registration / views.py”,第81行       没有)

     

文件“ allauth / account / utils.py”,第183行,位于complete_signup中       signal_kwargs = signal_kwargs)

     

perform_login中的文件“ /allauth/account/utils.py”,第133行       返回adapter.respond_user_inactive(请求,用户)

     

response_user_inactive中的文件“ allauth / account / adapter.py”,行454       reverse('account_inactive'))

     

_reverse_with_prefix中的文件“ django / urls / resolvers.py”,第622行       提高NoReverseMatch(msg)   django.urls.exceptions.NoReverseMatch:找不到'account_inactive'的反向。 “ account_inactive”不是有效的视图函数或模式名称。

我想听听使用django-rest-auth的人如何进行注册。 有人用过django-rest-auth并给我提示了吗?

2 个答案:

答案 0 :(得分:2)

is_active实际上不是用于此目的。当我不想删除用户时,我将其用作管理员来停用用户。您可能要改用ACCOUNT_EMAIL_VERIFICATION = "mandatory"

  

ACCOUNT_EMAIL_VERIFICATION(=“可选”)

     

确定注册期间的电子邮件验证方法-选择"mandatory""optional""none"中的一个。设置为“强制”时,将阻止用户登录,直到验证电子邮件地址。选择“可选”或“无”以允许使用未经验证的电子邮件地址登录。如果为“可选”,则仍发送电子邮件验证邮件,而如果为“无”,则不发送电子邮件验证邮件。

来源:https://django-allauth.readthedocs.io/en/latest/configuration.html

许多网站需要双重选择才能验证电子邮件地址的有效性或出于法律目的,您可以使用引号设置来完成此操作。


关于NoReverseMatch异常,您应该可以使用以下代码解决(但我认为切换到ACCOUNT_EMAIL_VERIFICATION = "mandatory"时可能不需要它):

urlpatterns = [
    ...
    url(r'^accounts/', include('allauth.urls')),
    ...
]

文档:https://django-allauth.readthedocs.io/en/latest/installation.html

但是,如果Django仅是后端,则可能不需要此视图或要覆盖它。要了解如何操作,您可以查看我的gist,在该位置我也将覆盖适配器,因为不需要URL。

答案 1 :(得分:0)

django rest auth通过使用一个额外的表来处理电子邮件,该表具有电子邮件帐户和一个标志(如果已验证)。

它取自django-allauth