如何在Django中编写自定义身份验证后端,将场景作为电话号码& OTP(一次性密码)对每个用户进行身份验证。Django中的自定义身份验证后端
如何以多种条件的形式验证每个用户。
- 如果验证电子邮件并存在密码(使用电子邮件和密码进行身份验证)。
- 如果手机已验证并存在(使用手机和otp进行身份验证,或者如果存在密码,则使用手机和密码进行身份验证)。
如何在Django中编写自定义身份验证后端,将场景作为电话号码& OTP(一次性密码)对每个用户进行身份验证。Django中的自定义身份验证后端
如何以多种条件的形式验证每个用户。
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
更好地为您必须指定设置authclass。 PY
AUTHENTICATION_BACKENDS =( 'applications.accounts.auth_backends.AuthenticationBackend', )
有很多方法来扩展用户模型,在这里我离开你这个页面,你可以选择其中哪些是你https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
我已经被使用自定义的用户模型,但使用AbstractBaseUser将电子邮件指定为我的用户名。我的状况是我如何使用电子邮件或电话进行身份验证。如果电子邮件然后获取密码进行身份验证,或者如果电话然后发送otp消息或带有密码的电话进行身份验证。我想根据电子邮件或电话号码对用户进行身份验证。 –
https://stackoverflow.com/questions/31370118/multiple-username-field-in-django-user-model也许这个帮助,当然你可以根据你需要添加更多的逻辑,例如,如果电话号码被验证 –
上面的例子很好。但是如果密码不存在,如何验证电话号码,我们必须发送otp来验证该用户。你能解释我如何解决这个问题。 –
嘿Nakul,你可以提供代码使用电子邮件和密码或手机与otp或手机密码。 –
我已编辑上面的代码,你可以检查? –
,你可以结合这个[https://stackoverflow.com/questions/6560182/django-authentication-without-a-password]检查otp –