Django allauth不会通过电子邮件确认用户登录

时间:2014-06-10 22:53:16

标签: python django django-allauth

我在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 个答案:

答案 0 :(得分:9)

ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True设置仅在用户执行注册操作并在同一浏览器会话中验证电子邮件时才有效。

See this code fragment

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

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

这是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)

注册后它对你有用吗?如果是,这是你的问题。否则你将不得不深入挖掘。