Django中的自定义身份验证后端

时间:2017-09-15 03:45:18

标签: django authentication

如何在Django中编写自定义身份验证后端,将场景作为电话号码& OTP(一次性密码)对每个用户进行身份验证。

如何以多种条件的形式验证每个用户。

  1. 如果验证了电子邮件并且存在密码(使用电子邮件和密码进行身份验证)。
  2. 如果手机已经过验证并存在(使用手机和otp验证或密码存在,请使用手机和密码验证)。

2 个答案:

答案 0 :(得分:1)

有很多方法可以扩展用户模型,我在这里留下这个页面,你可以选择哪一个更适合你https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

答案 1 :(得分:1)

from django.contrib.auth import backends, get_user_model
from django.db.models import Q

class AuthenticationBackend(backends.ModelBackend):
"""
Custom authentication Backend for login using email,phone,username 
with password
"""

def authenticate(self, username=None, password=None, **kwargs):
    usermodel = get_user_model()
    try:
        user = usermodel.objects.get(
            Q(username__iexact=username) | Q(email__iexact=username) | Q(phone__iexact=username)

        if user.check_password(password):
            return user
    except usermodel.DoesNotExist:
        pass

您必须在settings.py

中指定authclass

AUTHENTICATION_BACKENDS =(     ' applications.accounts.auth_backends.AuthenticationBackend&#39 ;, )