python - Django allauth 不会在电子邮件确认时登录用户

标签 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 %}

并且它们表示用户未通过身份验证。

感谢所有帮助,谢谢。

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

最佳答案

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

See this code fragment

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/

相关文章:

python - 如何使用 asyncio 从子进程流式传输 stdout/stderr,并在之后获取其退出代码?

django - 在 django admin 中使用按钮调用函数

python - django 序列 :item 4 expected string or unicode int found

django - 如何将受邀用户关联到邀请人的公司/群组?

python - 针对神经网络 tensorflow 的 1 个标签使用多个实例预处理数据

python - 无法找到 'ΓÇôi' 合适的输出格式

django-allauth Facebook 和 Google 社交网络登录失败

python - 在 req.path 中使用 django 的反向函数

python - 如果 __init__ 中未定义该属性,则显示该类的属性?

python - Django + mod_wsgi + apache : ImportError at/No module named djproj. 网址