【问题标题】:User is not authenticated in Django? It shows errors用户未在 Django 中进行身份验证?它显示错误
【发布时间】:2022-11-16 02:28:16
【问题描述】:

我正在创建一个网站,所以我在登录页面中完成了注册页面,每个详细信息都是正确的,但显示的是请验证您的详细信息我的意思是其他部分我也在用户名和密码后打印了打印声明当我输入时打印相同的详细信息但是无法访问登录。

视图.py

def sign_in(request):
        
    if request.method == "POST":
        username=request.POST['username']
        password=request.POST['password']
        print(username,password)
        user = authenticate(username=username,password=password)
            
        if user is not None:
            login(request,user)
            messages.success(request,"you are logged successfully ")
            return redirect("front_page")    
        else:
            messages.error(request,"please verify your details")
            return redirect("sign_in")   
    return render(request,"login.html")

def front_page(request):
    return render(request,"frontpage.html")

网址.py

 path('log_in',views.sign_in,name="sign_in"),
 path('front_page',views.front_page,name="front_page"),

html

 <div class="signup-form">
        <form action="{% url 'sign_in' %}" method="POST">
         {% csrf_token %}
         <h2 class="text-center">Login</h2>
         <p class="text-center">Please fill in this form to login your account!</p>
         <hr>
   
         <div class="form-group">
           <div class="input-group">
             <div class="input-group-prepend">
               <span class="input-group-text">
                 <span class="fa fa-user"></span>
                         </span>
             </div> 
             <input type="text" class="form-control" name="username" placeholder="Username" required="required">
           </div>
         </div> 
         
         <div class="form-group">
            <div class="input-group">
              <div class="input-group-prepend">
                <span class="input-group-text">
                  <i class="fa fa-lock"></i>
                </span>                    
              </div>
                <input type="password" class="form-control" name="password" placeholder="Password" required="required">
            </div>
          </div>

          <div class="form-group d-flex justify-content-center">
            <button type="submit" class="btn btn-primary btn-lg">Login</button>
          </div>
          <div class="text-center text-primary">Dont have a account? <a href="{% url 'register' %}">Create here </a></div>
        </form>
       
    </div>

我只想使用用户名和密码登录,但它显示请验证您的详细信息,但所有详细信息都是正确的。

有任何想法吗?

【问题讨论】:

    标签: python django django-models django-views django-urls


    【解决方案1】:

    authenticate() 还需要 request 作为参数,所以它应该是:

    user = authenticate(request,username=username,password=password)
    

    编辑:

    如果密码未按照@raphael 在以下评论中的建议进行哈希处理,则尝试使用make_password() 对其进行哈希处理,因此:

    from django.contrib.auth.hashers import make_password
    def sign_in(request):
            
        if request.method == "POST":
            username=request.POST['username']
            password=make_password(request.POST['password'])
            print(username,password)
            user = authenticate(username=username,password=password)
                
            if user is not None:
                login(request,user)
                messages.success(request,"you are logged successfully ")
                return redirect("front_page")    
            else:
                messages.error(request,"please verify your details")
                return redirect("sign_in")   
        return render(request,"login.html")
    
    

    【讨论】:

    • 我在验证中添加请求仍然显示错误兄弟
    • @Asim 这是我看到的一个错误,那么它只是意味着您的详细信息不正确,请再次检查您的详细信息。
    • @Asim 我认为你需要散列密码,你有自定义用户模型还是你只是使用默认的User Django 模型?
    • password=request.POST['password'] 是原始的、未散列的密码,django 不会存储它。当用户登录或注册时,原始密码会被散列,然后存储,因此它当然不会与表单发送的内容匹配。处理这个问题的最简单方法是在 fie forms.py 中创建一个简单的表单,然后你可以使用password = form.cleaned_data.get('password')。该密码将被散列,然后您可以比较它,它就会起作用。 @阿西姆
    • @raphael 也许它现在可以工作了,尽管我认为authenticate() 不需要散列密码但User 模型需要。
    猜你喜欢
    • 2013-01-08
    • 2021-06-11
    • 2016-07-30
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多