大佬教程收集整理的这篇文章主要介绍了使用 django 3.1 使用 djoser 进行自定义身份验证,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使我的后端(使用电话号码或电子邮件地址登录)与 djoser 一起登录时遇到问题。它似乎只是登录超级用户帐户,我希望它采用电话号码或电子邮件地址。 ps:后端不是来自 django rest 框架,但我从 vanilla django 创建了一个自定义身份验证。(我在 API 之前创建了完整的项目,以防万一这可能是问题) 我是 API 和 Django 的新手,我希望这是一个相关的问题。
这是我的代码,如果您需要更多,请告诉我,谢谢
我的设置:
DJOSER = {
'user_CREATE_password_RETYPE':True,'USERname_CHANGED_EMAIL_CONFIRMATION':True,'passworD_CHANGED_EMAIL_CONFIRMATION':True,'SEND_CONFIRMATION_EMAIL':True,'SET_USERname_RETYPE':True,'SET_password_RETYPE':True,'passworD_reset_CONFIRM_URL':'password/reset/confirm/{uID}/{token}','USERname_reset_CONFIRM_URL':'password/reset/confirm/{uID}/{token}','ACTIVATION_URL':'activate/{uID}/{token}','SEND_ACTIVATION_EMAIL':True,'serialiZERS': {
'user_create': 'rafiki.serializerS.UserCreateserializer','user': 'rafiki.serializerS.UserCreateserializer','user_delete': 'djoser.serializerS.Userdeleteserializer',}
}
我的身份验证模型:
class CustomUseRMANager(BaseUseRMANager):
"""
Custom user model manager where Email_Address is the unique IDentifIErs
for authentication instead of usernames.
"""
def create_user(self,Email_Address,password,**extra_fIElds):
"""
Create and save a User with the given Email_Address and password.
"""
if not Email_Address:
raise ValueError(_('The Email_Address must be set'))
Email_Address = self.normalize_email(Email_Address)
user = self.model(Email_Address=Email_Address,**extra_fIElds)
user.set_password(password)
user.save()
return user
def create_superuser(self,**extra_fIElds):
"""
Create and save a SuperUser with the given Email_Address and password.
"""
extra_fIElds.setdefault('is_staff',TruE)
extra_fIElds.setdefault('is_superuser',TruE)
extra_fIElds.setdefault('is_active',TruE)
if extra_fIElds.get('is_staff') is not True:
raise ValueError(_('Superuser must have is_staff=True.'))
if extra_fIElds.get('is_superuser') is not True:
raise ValueError(_('Superuser must have is_superuser=True.'))
return self.create_user(Email_Address,**extra_fIElds)
class Customer(AbstractUser):
username = None
Phone_number = models.CharFIEld(max_length=15,blank=TruE)
Email_Address = models.EmailFIEld(unique=TruE)
USERname_FIELD = 'Email_Address'
required_FIELDS = []
objects = CustomUseRMANager()
class Meta:
verbose_name = 'Customer'
verbose_name_plural = 'Customers'
认证类:
from django.contrib.auth import get_user_R_634_11845@odel
from django.contrib.auth.BACkends import BaseBACkend
from store.models import Customer
from django.db.models import Q
class MyBACkend(BaseBACkend):
def authenticate(self,request,username=None,password=NonE):
try:
user = Customer.objects.get(
Q(Phone_number=userName) | Q(Email_Address=userName)
)
pwd_valID = user.check_password(password)
if pwd_valID:
return user
return None
except user.DoesnotExist:
return None
def get_user(self,user_iD):
try:
return Customer.objects.get(pk=user_iD)
except Customer.DoesnotExist:
return None
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
以上是大佬教程为你收集整理的使用 django 3.1 使用 djoser 进行自定义身份验证全部内容,希望文章能够帮你解决使用 django 3.1 使用 djoser 进行自定义身份验证所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。