首页 > 解决方案 > 为什么 django allauth 重定向到 /accounts/login/?=next/MY_PAGE 而不是登录?

问题描述

我正在尝试使用 Django allauth 在站点上处理用户身份验证。但是,在我的网站上输入用户名和密码并单击“登录”后,我被重定向到 /accounts/login/?=next/MY_PAGE 并且登录页面只是重新加载。我见过许多类似的问题,我知道有时人们在使用社交身份验证时会遇到这个问题,但我没有使用任何形式的社交身份验证。我已经将 LOGIN_REDIRECT_URL 设置为所需页面的 URL,并尝试按如下方式创建适配器:

class AccountAdapter(DefaultAccountAdapter):
    def is_open_for_signup(self, request):
        return getattr(settings, "ACCOUNT_ALLOW_REGISTRATION", True)

    def get_login_redirect_url(self, request):
        path = "/news/"
        return path

其中 get_login_redirect_url 应该将应用程序定向到所需的页面。我在其他帖子中读到,没有加载下一页(在本例中为“新闻”)这一事实意味着 allauth 实际上并没有让我登录,这就是为什么我最终只是重新加载了登录页面。有人能指出我正确的方向吗?谢谢!

附加信息这是我现在尝试处理登录的方式。

<!-- <form class="login" method="POST" action="{% url 'account_login' %}"> -->
            <form class="login" method="POST" action="{% if request.path|slice:':6' == '/login' %}/news{% else %}{{request.path}}{% endif %}">
            {% csrf_token %}
            {{ form|crispy }}
            {% if redirect_field_value %}
              <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
            {% endif %}
            <div class="form-group container-login100-form-btn">
              <button type="submit" class="login100-form-btn">{% trans 'Log In' %}</button>
            </div>
            <div class="form-group container-login100-form-btn">
              <a href="{% url 'account_signup' %}" class="btn btn-link">{% trans 'Or sign up for ConnectHer here' %}</a>
              <a href="{% url 'account_reset_password' %}" class="btn btn-link pull-right">{% trans 'Forgot your password?' %}</a>
            </div>
          </form>

顶部注释掉的行是我在尝试解决我的问题之前的原始版本。

标签: djangodjango-allauth

解决方案


您如何login向用户显示链接?我敢打赌,您登录页面上的链接类似于:

<a href="/login?next={{ request.path }}">Login</a>

这基本上是(在登录页面上时):

<a href="/login?next=/login">Login</a>

它会立即将您送回。您可以在模板中进行测试以设置next=参数:

<form class="login" method="POST" action="/login?next={% if request.path|slice:':6' == '/login' %}/news{% else %}{{request.path}}{% endif %}">

奖金:

以下是向|startswith模板添加过滤器的方法:

def startswith(val1, val2):
    if not val1:
        return False
    else:
        return val1.startswith(val2)

register.filter("startswith", startswith)

推荐阅读