首页 > 其他 > 详细

django3 authincate一直返回None

时间:2020-05-25 20:46:45      阅读:68      评论:0      收藏:0      [点我收藏+]

我使用Django内部的User认证系统,本以为User.objects.create_user(username,password,email)加密及存入注册,使用user=auth.authenticate(username=username,password=password)解密并登陆,但反复auth.authenticate()测试,均返回none,在csdn中看了别人的文章,使用 check_password(password,pwd),还是返回none,查了UserManager下create_user()加密使用set_password()来加密的,经测试 check_password(password,pwd)不一致,可能是个bug,没有办法,只能在注册中加入user.set_password(password),问题解决!代码如下:

注册:  

class RegisterViews(View):
def get(self,request):
print("get")
return render(request,‘register.html‘)

def post(self,request):
print("post")
username = request.POST.get(‘user_name‘)
password = request.POST.get(‘pwd‘)
password1 = request.POST.get(‘cpwd‘)
email = request.POST.get(‘email‘)
allow = request.POST.get(‘allow‘)

if not all([username,password,password1,email]):
return render(request, ‘register.html‘, {‘errmsg‘:‘要素填写不全‘})

if allow != ‘on‘:
return render(request, ‘register.html‘,{‘errmsg‘:‘用户使用协议未勾选‘})

if password != password1:
return render(request, ‘register.html‘,{‘errmsg‘:‘两次密码输入不一致‘})

if not re.match(‘^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$‘,email):
return render(request, ‘register.html‘, {‘errmsg‘:‘邮箱格式有误‘})

try:
User.objects.get(username=username)
return render(request, ‘register.html‘, {‘errmsg‘: ‘用户已注册‘})
except ObjectDoesNotExist as e:
user=User.objects.create_user(username,password,email)
user.is_active=0
print("++++++++++++++")
print(user.password)
user.set_password(password)
print(user.password)
print("++++++++++++++")
user.save()


return render(reverse(‘user:login‘))

 



登陆:

class LoginViews(View):

def get(self, request):
return render(request, ‘login.html‘)

def post(self,request):
username=request.POST.get("username")
password = request.POST.get("pwd")

if not all([username,password]):
return render(request, ‘login.html‘, {‘errmsg‘: ‘要素填写不全!‘})
print(username,password)
#user=auth.authenticate(username=username,password=password)

try:
user=User.objects.get(username=username)
except User.DoesNotExist:
return render(request, ‘login.html‘, {‘errmsg‘: ‘用户不存在!‘})

pwd=user.password
pwd1=make_password(password)
print(pwd,pwd1)
if check_password(password,pwd):
print(‘ok‘)
return render(request, ‘list.html‘)

else:
print(‘error‘)
return render(request, ‘login.html‘, {‘errmsg‘: ‘用户名或者密码错误!‘})
 

 解决方案二:

查资料发现只要在setting文件里面加上AUTHENTICATION_BACKENDS = [‘django.contrib.auth.backends.AllowAllUsersModelBackend‘]让他不自动关联数据库的is_active即可完美解决。

django3 authincate一直返回None

原文:https://www.cnblogs.com/matt0668/p/12960578.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!