繁体   English   中英

Forbidden (403) CSRF 验证失败。 请求中止。 登录页面不工作

[英]Forbidden (403) CSRF verification failed. Request aborted. login page not working

我在创建登录页面时被卡住,并收到诸如“禁止 (403) CSRF 验证失败。请求中止”之类的错误。 请帮我解决这个问题

视图.py

from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from users.forms import UserRegisterForm

# Create your views here.
def register(request):
    if request.method=="POST":
        form=UserRegisterForm(request.POST)
        if form.is_valid():
            form.save()
            username=form.cleaned_data.get('username')
            messages.success(request, f"Account created for {username}")
            return redirect('app1-home')
    else:
        form=UserRegisterForm()
    return render(request, "users/register.html",{"form":form})

网址.py

from django.contrib import admin
from django.urls import include, path
from users import views as user_views
from django.contrib.auth import views as auth_views
from app1 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('app1.urls')),
    path('register/', user_views.register, name='register'),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),

表单.py

 from django import forms
    from django.contrib.auth.models import  User
    from django.contrib.auth.forms import UserCreationForm


    class UserRegisterForm(UserCreationForm):
        email=forms.EmailField()

        class Meta:
            model=User
            fields=["username", "email", "password1", "password2"]
**login.html**

{% extends "app1/base.html" %}
{% load crispy_forms_tags %}
{% load staticfiles %}
{% block content %}
    <div class="content-section">
        <form method="POST" >
          {% csrf_token %}

            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Login</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Login </button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Sign Up Here? <a class="ml-2" href="{%url "register" %}">Sign Up</a>
            </small>
        </div>
    </div>
{% endblock content %}

在settings.py文件中,我曾经写过

REDIRECT_LOGIN_URL = 'app1-home'

我正在创建一个包含登录、注销和注册的博客。 直到注册我在登录页面后成功它不会重定向到索引页面

您需要在表单中添加以下代码片段,以在 Django 表单中启用 csrf 验证,请参见此处

就像下面的代码:

<form>
    {% csrf_token %}
    <anything_else>
</form>

此外,每次使用render_to_response都必须使用 RequestContext(request) :

return render_to_response("login.html",
    {"registration_id":registration_id},
    context_instance=RequestContext(request))

并且您必须同时导入身份验证和登录:

from django.contrib.auth import authenticate, login

我希望这会有所帮助...谢谢:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM