django-allauth邮箱验证后无法登录问题求助(Cloud9环境)
django-allauth邮箱验证后无法自动登录且重复收到邮件的解决办法
环境信息
- Cloud9
- Python 3.7.9
- Django 2.2.17
- django-allauth 0.44.0
当前settings.py配置
ACCOUNT_AUTHENTICATION_METHOD = 'email' ACCOUNT_USERNAME_REQUIRED = True ACCOUNT_EMAIL_REQUIRED = True LOGIN_REDIRECT_URL = 'xxx:index' ACCOUNT_LOGOUT_REDIRECT_URL = 'account_login' ACCOUNT_LOGOUT_ON_GET = True ACCOUNT_EMAIL_SUBJECT_PREFIX = '' ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https' ACCOUNT_UNIQUE_EMAIL = True DEFAULT_FROM_EMAIL = 'tttt@gmail.com' EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' ACCOUNT_EMAIL_VERIFICATION = "mandatory"
问题现象
- 注册账号后收到验证邮件:
You're receiving this e-mail because user jjjj@gmail.com has given your e-mail address to register an account on example.com.
To confirm this is correct, go to https://eeee.cloud9.us-east-2.amazonaws.com/accounts/confirm-email/4444/
- 点击验证链接后无法自动登录系统,反而收到另一封验证邮件,无任何错误提示,账号密码确认输入正确,期望点击验证链接后直接登录。
解决步骤
1. 开启验证后自动登录
在settings.py中添加以下配置,启用邮箱验证完成后的自动登录功能:
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True
该配置在django-allauth 0.44.0版本中默认关闭,启用后用户点击验证链接即可自动登录,无需手动输入账号密码。
2. 修复重复发送验证邮件的问题
- 排查登出配置冲突:临时注释
ACCOUNT_LOGOUT_ON_GET = True配置后测试。该配置允许通过GET请求触发登出,可能在验证流程中意外触发登出逻辑,导致系统判定用户未完成验证,重新发送邮件。若测试后问题解决,建议改用默认的POST请求方式登出,避免GET请求的冲突。 - 检查验证状态:登录Django后台,查看
emailaddress表中对应邮箱的verified字段是否在点击验证后被标记为True。若未标记,说明验证请求未正常执行,需检查:- Cloud9环境的HTTPS配置是否生效,确保
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'与实际访问协议一致; ALLOWED_HOSTS是否包含Cloud9的实际域名(eeee.cloud9.us-east-2.amazonaws.com),避免请求被拒绝。
- Cloud9环境的HTTPS配置是否生效,确保
3. 修正站点域名配置
在settings.py中补充站点配置:
SITE_ID = 1 ALLOWED_HOSTS = ['eeee.cloud9.us-east-2.amazonaws.com', 'localhost', '127.0.0.1']
登录Django后台(/admin/),找到sites应用下的Site对象,将域名和显示名称修改为实际的Cloud9域名(eeee.cloud9.us-east-2.amazonaws.com),确保邮件中的验证链接域名与站点实际域名一致,避免验证流程异常。
内容的提问来源于stack exchange,提问作者Jun
相关产品推荐
相关产品推荐

