Django 使用auth.authenticate进行用户验证时返回为None

问题描述

使用auth.authenticate(username= username,passowrd=passowrd),这个用户认证时候,明明数据库中有记录且账号密码都正确,但是返回就None

解决方案

有如下两种方案:
(1)使用了自己创建的用户表,并没有添加到在auth_user(django自带的表)中,从而导致auth.authenticate()根本查不到响应的数据
解决方法:改用auth_user表存储用户相关信息,或者抛弃auth.authenticate()这个方法

(2)检查自己数据库中的auth_user表中,密码是否为明文,如果是,那是因为使用了User.objects.create(),这样插进去的数据密码是明文,所以导致了auth.authenticate()根本查不到响应的数据,需要改为User.objects.create_user(username=username,password=password)插入数据,这个方法会把密码生成哈希值

注册登录代码参考:


def login_view(request):
    form = forms.LoginForm(request.POST or None)
    msg = None
    if request.method == "POST":
        # 判断数据是否合法
        if form.is_valid():
            # 从form表单中获取数据
            username = form.cleaned_data.get("username")
            logger.info(type(username))
            # username = username.strip()
            password = form.cleaned_data.get("password")
            role = form.cleaned_data.get("role")
            logger.info("username = {},password = {},role={}".format(username, password, role))
            user = authenticate(username=username, password=password)
            if user is not None:
                # 使用seesion 来记录username
                request.session['username'] = username
                # 通过login() 来存储用户信息 存储在cookies里 但是获取的cookies里的值是不规则的
                login(request, user)
                return HttpResponseRedirect(reverse('home', args=(username,)))
            else:
                msg = 'Username or Password invalid'
        else:
            msg = 'Error : validating the form'
    logger.info(msg)
    return render(request, "accounts/login.html", {"form": form, "msg": msg})


@login_required
def logout_view(request):
    logout(request)
    # 登出就删除所有session
    request.session.flush()
    return redirect('/login')


def register_user(request):
    msg = None
    success = False

    if request.method == "POST":
        form = forms.SignUpForm(request.POST)

        if form.is_valid():
            # form.save()
            username = form.cleaned_data.get("username")
            password = form.cleaned_data.get("password1")
            password_check = form.cleaned_data.get("password2")
            email = form.cleaned_data.get("email")
            if (UserInfo.objects.filter(username=username).exists()):
                msg = "用户已存在"
            elif (password != password_check):
                msg = "两次输入密码不一致"
            else:
                msg = '用户已创立 - 请 <a href="/login">登录</a>.'
                success = True
                UserInfo.objects.create_user(username=username, password=password,email=email)
        else:
            msg = 'Form is not valid'
    else:
        form = forms.SignUpForm()

    return render(request, "accounts/register.html", {"form": form, "msg": msg, "success": success})
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值