首页 > 解决方案 > Django All-Auth 未重定向到 LOGIN_URL

问题描述

我进行了全身份验证设置和工作,但是通过覆盖全身份验证登录模板,我无法使 LOGIN_URL 正常工作并重定向到“/accounts/login/”作为默认视图。

设置.py

LOGIN_URL = '/accounts/login/'

如果我去 localhost/accounts/login,我可以得到很好的页面,但是当访问 localhost 时,我无法让它成为默认位置。

我可能误解了文档以及它应该如何工作。

希望在http://127.0.0.1:8000/accounts/login/?next=/访问 localhost 时将其作为主页。

网址.py

urlpatterns = [
    #allauth urls
    path('accounts/', include('allauth.urls')),

    path('', views.login, name='login'),
]

视图.py

def login(request):
    return render(request, 'account/login.html')

login.html(所有身份验证模板覆盖)

{% extends "index.html" %}
{% load crispy_forms_tags %}
{% load socialaccount %}

{% block head_title %}Login{% endblock head_title %}

{% block content %}
  <div class="text-center">
    <h1 class="h4 text-gray-900 mb-4">Welcome Back!</h1>
  </div>
  <form id="login_form" class="small" method="POST" action="{% url 'account_login' %}">
    {% csrf_token %}
      {{ form|crispy }}
      {% if redirect_field_value %}
      <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
      {% endif %}
      <button class="btn btn-primary btn-user btn-block" type="submit">Login</button>
  </form>
  <hr>
  <a href="{% provider_login_url 'google' %}" class="btn btn-google btn-user btn-block" role="button">
      <i class="fab fa-google fa-fw"></i> Login with Google
  </a>
  <a href="{% provider_login_url 'facebook' %}" class="btn btn-facebook btn-user btn-block" role="button">
      <i class="fab fa-facebook-f fa-fw"></i> Login with Facebook
  </a>
  <hr>
  <div class="text-center">
      <a class="small" href="#">Forgot Password?</a>
  </div>
  <div class="text-center">
      <a class="small" href="#">Create an Account!</a>
  </div>
{% endblock content %}

标签: djangodjango-allauth

解决方案


刚刚发现错误。我试图创建一个用于访问登录页面的 url 和视图,而您需要做的就是为主应用程序页面创建一个视图和 url,例如 base.html,然后在其上放置一个 @login_required 装饰器。当您尝试导航到应用程序但未登录时,它会重定向到 all-auth 的登录模板。

最终配置如下:

设置.py

LOGIN_URL = '/accounts/login/'

视图.py

@login_required
def base(request):
    return render(request, 'base.html')

网址.py

urlpatterns = [
    path('', views.base, name='base'),
]

推荐阅读