首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用户登录django时用户身份验证失败

用户登录django时用户身份验证失败
EN

Stack Overflow用户
提问于 2020-04-17 21:00:33
回答 2查看 45关注 0票数 1

我正在尝试使用python和django创建一个简单的登录页面。我的注册/注册工作正常,我可以注册用户了。注册用户后,在使用用户名和密码登录用户时,不会对用户进行身份验证。我不能找出确切的错误,谁能指导我通过这个。这是我的models.py

代码语言:javascript
运行
复制
from django.db import models
from django.contrib.auth.base_user import AbstractBaseUser

# Create your models here.
# create a model for user details with fields username, firstname, lastname,
# emial, password,
class CustomUserInfo(AbstractBaseUser):

    '''
    model for basic user details
    returns username of the user
    '''
    firstname = models.CharField(max_length=50)
    lastname = models.CharField(max_length=50)
    username = models.CharField(max_length=50, unique=True)
    email = models.EmailField()
    password = models.CharField(max_length=15)
    dob = models.DateField()

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['firstname','lastname','username','email','password','dob']

    # return the string form of the object
    def __str__(self):
        return self.username

这是我的views.py文件

代码语言:javascript
运行
复制
from django.shortcuts import render
from django.views.generic import TemplateView, DetailView, ListView
from django.contrib.auth import login,logout,authenticate
from django.contrib.auth.decorators import login_required
from django.urls import reverse
from django.http import HttpResponse,HttpResponseRedirect
from custom_login_app.forms import CustomUserInfoForm
from custom_login_app import models


# Create your views here.

# about template view
class AboutView(TemplateView):

    template_name = 'about.html'


# user profile detail page
class ProfileDetailView(DetailView):

    context_object_name = 'user_detail'
    model = models.CustomUserInfo
    template_name = 'userinfo_detail.html'


# home page view
def index(request):
    return render(request,'index.html')

# logout view
@login_required
def customlogout(request):
    logout(request)
    return HttpResponseRedirect(reverse('index'))

# registration view
def registration(request):

    # bool variable to chcek the user is registered
    registered = False

    # check the user has poste the data through the form
    if request.method == 'POST':

        # create a form object
        user_form = CustomUserInfoForm(data=request.POST)

        # check if the form is valid
        if user_form.is_valid():

            # save the entered details to the form object
            user = user_form.save()
            # validate and set the password for hashing
            user.set_password(user.password)
            # save the details
            user.save()
            registered = True

        else:
            print(user_form.errors)

    else:

        # display the registration form
        user_form = CustomUserInfoForm()

    return render(request,'registration.html',{'user_form':user_form,
                                            'registered':registered})

# login view
def customlogin(request):
    # check if the user has posted the details
    if request.method == 'POST':

        # Grab the entered username and password
        username = request.POST.get('username')
        password = request.POST.get('password')

        # authenticate the entered details using built in django authenticate method
        user = authenticate(username=username, password=password)
        # if the user is authenticated, user is available
        if user:

            # check is the user active
            if user.is_active:

                # login the user with the entered details using builtin login module
                login(request,user)

                # Once logged in, redirect to home page
                return HttpResponseRedirect(reverse('index'))

                # if user account is not active, resturn a simple HttpResponse
            else:
                return HttpResponse('Your account is not active')

        else:
            # if the user is invalid or has entered invalid details
            print("Someone tried to login with invalid details")
            print("Username:{}, Password:{}".format(username,password))
            return HttpResponse("Invalid Credentials, Please try again!")

    else:
        # if the user has not entered the login details
        return render(request,'login.html',{})

我的login.html是

代码语言:javascript
运行
复制
{% extends 'base.html' %}

{% block content %}
  <div class="login">
    <p class="logintext">Please Login</p>
    <form class="form-group loginform" action="{% url 'user_login' %}" method="POST">
      {% csrf_token %}
      <div class="usr">
        <label class="usr_label" for="username">Username</label>
        <input class="usr_input" type="text" name="username" placeholder="Enter Username"><br/>
      </div>
      <div class="passwd">
        <label class="passwd_label" for="password">Password</label>
        <input class="passwrd_input" type="password"  name="password" placeholder="Enter Password"<br/>
      </div>
      <div class="buttons">
        <input class="btn btn-dark login-btn" type="submit" value="Login">
        <a class="btn btn-dark register-btn" href="{% url 'registration' %}">New User?</a>
      </div>
    </form>
  </div>
{% endblock %}

任何答案都将不胜感激。提前感谢

EN

回答 2

Stack Overflow用户

发布于 2020-04-17 21:15:11

我认为您在创建用户时设置的密码不正确。假设字段名为password,则应为:

代码语言:javascript
运行
复制
user.set_password(form.cleaned_data['password'])
票数 3
EN

Stack Overflow用户

发布于 2020-04-17 21:18:18

我不确定user.is_active的缺省值是什么,但是,由于我没有在您提供的代码中看到它的设置,可能是因为user.is_activeFalse,所以您永远不会访问登录函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61272304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档