首页 > 其他 > 详细

django3 authincate一直返回None

时间:2020-05-25 20:46:45      阅读:65      评论: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 版权所有
打开技术之扣,分享程序人生!