我正在尝试创建一个适用于 Customuser 的登录视图目前,即使字段为空/不正确的输入,登录表单也会重定向

问题描述

我已经安装了allauth来处理登录,我似乎没有找到正确登录的突破,因为重定向只是在没有任何身份验证的情况下将所有人带到目标页面..注册工作正常,我可以看到在管理员中创建用户

Settings.py

 INSTALLED_APPS = [
'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','useraccount','crispy_forms','django.contrib.sites','allauth','allauth.account','allauth.socialaccount','allauth.socialaccount.providers.facebook','allauth.socialaccount.providers.google',

Forms.py

​​>
from django.contrib.auth.forms import UserCreationForm,AuthenticationForm
from useraccount.models import CustomUser as User
from django import forms

class LoginForm(AuthenticationForm):

    class Meta:
        model = User
        fields = ['email','password1']

Views.py

from django.contrib.auth import logout,login,authenticate
from django.shortcuts import render,redirect
from .forms import RegisterForm,LoginForm
from django.urls import reverse_lazy
from django.views.generic.edit import CreateView
from django.http import request,HttpResponseRedirect

def login_request(request):
if request.method == 'POST':
    form = LoginForm(data=request.POST)
    email = request.POST.get('email')
    password = request.POST.get('password')
    if form.is_valid ():
       user = form.get_user ()
       user = authenticate ( email=email,password=password )
       login ( request,user )
    return HttpResponseRedirect(reverse_lazy('dashboard'))
else:
    form = LoginForm ()
    return render ( request=request,template_name="useraccount/login.html",context={"form": form} )'


 

Urls.py

   from django.contrib import admin
   from django.urls import path,include
   from useraccount import views as c
   from useraccount import views as m
   from useraccount import views as a
   from django.contrib.auth import views as auth_views

   app_name = 'useraccount'

   urlpatterns = [
       path ( 'admin/',admin.site.urls ),path ( '',a.index,name='index'),path ( 'login/',m.login_request,name='login' ),path ( 'signup/',c.register,name='create' ),path ( 'logout/',m.logout_request,name='logout' ),path ( 'dashboard/',m.dashboard,name='dashboard'),path('accounts/',include('allauth.urls')),]

Login.html

{% extends 'useraccount/blank.html' %}


{% block title %}
Pinterest
{% endblock %}



{% load crispy_forms_tags %}
{% block Content %}
 <div class="forming-container">
    <form method="post">

{% csrf_token %}


  <div class="mb-3">
  <input type="email" class="form-control btn-radius" id="exampleFormControlInput1" 
  placeholder="Email"> {{form.email}} </input>
    </br>
     <input type="password" class="form-control btn-radius" id="exampleFormControlInput2" 
  placeholder="Password"> {{form.password1}} </input>

    </div>

    <input class="btn d-block bg-red btn-radius text-white" type="submit" value="Continue" >
         </form>

    </div>
    <h4>OR</h4>
    <div class="social-sign d-flex mb-3">
    <i class="fab fa-facebook text-white mr-2 ml-2"></i>
    <a href="www.facebook.com" class="text-white"> Continue with facebook</a>
    </div>
    <div class="google-sign d-flex">
    <img src="https://res.cloudinary.com/www-daniekeys-com/image/upload/v1625758543/google- 
 img-removebg-preview_qm4mgu.png" alt="" class="g-img">
  <a href="www.google.com" class="text-dark"> Continue with google</a>
 </div>
 <div class="agreement">
  <p class="text-faded text-center text-reduce">
   By continuing,you agree to Pinterest's Terms of Service and ackNowledge that you've read 
  our Privacy Policy
  </p>
  <div class="d-flex bold justiLog infy-content-center">
  <p class="text-dark ">
  <a href="/signup" class="text-dark">Need an account? Sign up Now</a></p>
  </div>
 </div>
  </div>

  {% endblock %}

解决方法

Views.py

def login_request(request):
    if request.method == 'POST':
        form = LoginForm(data=request.POST)
        email = request.POST.get('email')
        password = request.POST.get('password')
        if form.is_valid():
            user = authenticate(email=email,password=password)
            if user is not None:
                login(request,user)
                return HttpResponseRedirect(reverse_lazy('dashboard'))
            else:
                print('Invalid email or password')
    else:
        form = LoginForm()
        return render(request=request,template_name="useraccount/login.html",context={"form": form})

试试这个。如果不是 None(输入的凭据正确),这只会登录用户

如果这是您要找的,请接受答案。快乐编码!