2014-06-10 54 views
5

我在我的django项目中使用django-allauth,我明白ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION默认设置为True。不幸的是,用户没有在确认时自动登录,所以我明确地将此设置设置为True。不幸的是,用户在确认他们的电子邮件时仍然没有登录。我的allauth设置:Django 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 %} 

而且它们表明用户未通过身份验证。

所有帮助表示感谢你。

编辑:我试着改变登录重定向,以确定它是否实际上登录用户,并将它们发送到索引,但它不是。即使我已将登录重定向更改为其他页面,仍然会将它们发送到索引。

回答

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) 

它是否适合你注册后吧?如果是的话,这是你的问题。否则你必须深入挖掘。