为什么我不能从我的 Django 站点上的其他计算机进行身份验证?



我已经在pythonanywhere发布了我的网站,内部有一个简单的用户登录,我创建了一个用户,当我使用自己的计算机进行身份验证时,它可以正常工作,但是当我使用另一个计算机进行身份验证时机器我会收到此错误:

禁止(403)-CSRF验证失败。要求中止。

我的网站发布在域名上,其他所有内容都很好。有什么问题?

用正确的中间件,上下文和CSRF保护正确设置了所有内容,因为我可以使用自己的计算机登录。

更新代码:

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

login.py

def login(request):
    context = {}
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                auth_login(request, user)
                return redirect('login')
            else:
                context['error'] = 'L'utilisateur a été désactivé'
        else:
            context['error'] = 'Mauvais nom d'utilisateur ou mot de passe'
    return render(request, 'user.html', context)

user.html

<form method="post" action="{% url 'login' %}">
    {% csrf_token %}
    <p>Nom :<input type="text" class="form-control" name="username"></p>
    <p>Mot de passe:<input type="password" class="form-control" name="password"></p>
    <input class="submit btn btn-success pull-right" value="Se connecter" type="submit">
</form>

我通过按照本教程使用Django的内置登录来解决我的问题:

  • django for Girls-登录/注销

我没有找到我的csrf检查无法正常工作的原因,因为控制台上没有错误,而代币则使用{{ csrf_token }}很好。

相关内容

最新更新