问题描述
我已经安装了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(输入的凭据正确),这只会登录用户
如果这是您要找的,请接受答案。快乐编码!