我在我的 django 项目中使用 django-allauth,我知道 ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION
默认设置为 True
。不幸的是,用户没有在确认时自动登录,所以我明确地将此设置设置为 True
。不幸的是,用户在确认他们的电子邮件时仍然没有登录。我的 allauth 设置:
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_EMAIL_SUBJECT_PREFIX = 'MyApp | '
ACCOUNT_PASSWORD_MIN_LENGTH = 6
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = 'app:createStudent'
ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = 'app:createStudent'
LOGIN_REDIRECT_URL = 'app:index'
ACCOUNT_LOGOUT_REDIRECT_URL = 'app:index'
ACCOUNT_LOGOUT_ON_GET = True
电子邮件确认重定向也没有正确触发,用户被路由到索引。这可能表明用户实际上已经登录,但我有条件检查:
{% if request.user.is_authenticated %}
<a href="{% url 'account_logout' %}">Sign Out</a>
{% else %}
<a href="{% url 'account_login' %}" class="login-popup">Login</a> <a href="{% url 'account_signup' %}" class="login-popup">Register</a>
{% endif %}
并且它们表示用户未通过身份验证。
感谢所有帮助,谢谢。
编辑:我已经尝试更改登录重定向以确定它是否真的让用户登录并将他们发送到索引,但事实并非如此。即使我将登录重定向更改为不同的页面,确认仍会将它们发送到索引。
最佳答案
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
设置仅在用户执行注册操作并在同一浏览器 session 中验证电子邮件时才有效。
def send_email_confirmation(request, user, signup=False):
...
if signup:
request.session['account_user'] = user.pk
session 存储 account_user
变量,稍后用于验证用户是否应自动登录。如果 session 丢失,它将无法工作。
这是 check is performed 的位置:
def login_on_confirm(self, confirmation):
...
user_pk = self.request.session.pop('account_user', None)
...
if user_pk == user.pk and self.request.user.is_anonymous():
return perform_login(self.request,
user,
app_settings.EmailVerificationMethod.NONE)
它在注册后对您有用吗?如果是,这是你的问题。否则你将不得不深入挖掘。
关于python - Django allauth 不会在电子邮件确认时登录用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24152139/