为什么 django allauth 重定向到 /accounts/login/?=next/MY_PAGE 而不是登录?
Why is django allauth redirecting to /accounts/login/?=next/MY_PAGE instead of logging in?
我正在尝试使用 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>
顶部的注释行是我在尝试解决我的问题之前的原始版本。
您如何向用户显示 login
link?我敢打赌,您登录页面上的 link 类似于:
<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)
您需要将其放入您的设置文件中:
LOGIN_URL = "/login/"
LOGIN_REDIRECT_URL = "/xxx/"
我正在尝试使用 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>
顶部的注释行是我在尝试解决我的问题之前的原始版本。
您如何向用户显示 login
link?我敢打赌,您登录页面上的 link 类似于:
<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)
您需要将其放入您的设置文件中:
LOGIN_URL = "/login/"
LOGIN_REDIRECT_URL = "/xxx/"