Django allauth无法在电子邮件确认时登录用户

6

我在我的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 %}

它们表明用户未经过身份验证。

非常感谢您的所有帮助。

编辑:我尝试更改登录重定向以确定是否实际上登录了用户并将其发送到索引,但事实并非如此。即使我将登录重定向更改为不同的页面,确认仍然会将它们发送到索引。

1个回答

11
< p >当用户在同一浏览器会话中进行注册并验证电子邮件时,ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True设置才会起作用。

请参阅此代码片段

def send_email_confirmation(request, user, signup=False):
    ...
    if signup:
        request.session['account_user'] = user.pk 

该会话存储account_user变量,该变量稍后用于验证用户是否应自动登录。如果会话丢失,则它将无法工作。

这是执行检查的位置

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)

如果您在注册后立即可以使用,那么这可能是您遇到的问题。否则,您需要深入挖掘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接