email backend

因为 Django auth 应用内置只支持用户名和密码的认证方式,所以
目前用户是无法使用 Email 进行登录的。
为了实现邮箱登录,我们需要编写一个认证后台。
这个后台的作用便是验证用户提供的凭据(这里是邮箱以及密码)是合法的。
完全仿照内置的 ModelBackend 代码即可。    
首先在 users 应用下新建一个 backends.py 文件,然后写入如下代码:

users/backends.py

    from .models import User
    
    class EmailBackend(object):
        def authenticate(self, request, **credentials):
            # 要注意登录表单中用户输入的用户名或者邮箱的 field 名均为 username
            email = credentials.get('email', credentials.get('username'))
            try:
                user = User.objects.get(email=email)
            except User.DoesNotExist:
                pass
            else:
                if user.check_password(credentials["password"]):
                    return user
    
        def get_user(self, user_id):
            """
            该方法是必须的
            """
            try:
                return User.objects.get(pk=user_id)
            except User.DoesNotExist:
                return None

逻辑非常简单,就是根据用户提供的 Email 和密码,检查该 email
对应的用户是否存在,如果存在则检查密码是否正确,如果密码也没有
问题,则返回该 user 对象。

配置 Backend

接下来就要告诉 Django,需要使用哪些 Backends 对用户的凭据信息进行验证,这需要在 settings.py 中设置:
settings.py

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'users.backends.EmailBackend',
)
第一个 Backend 是 Django 内置的 Backend,当用户提供的是用
户名和正确的密码时该 Backend 会通过验证;第二个 Backend 是
刚刚自定义的 Backend,当用户提供的是 Email 和正确的密码时该
 Backend 会通过验证。

猜你喜欢

转载自blog.csdn.net/yx1179109710/article/details/81367617