2014-06-10 18 views
5

Używam django-allauth w moim projekcie django i rozumiem, że ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION jest domyślnie ustawiony na True. Niestety, użytkownik nie był automatycznie zalogowany po potwierdzeniu, więc wyraźnie ustawiłem to ustawienie na True. Niestety użytkownik nadal nie jest zalogowany po potwierdzeniu adresu e-mail. Ustawienia mojego allauta:Django allauth nie loguje użytkownika w wiadomości e-mail potwierdź

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 

Przekierowania potwierdzające pocztę e-mail również nie uruchamiają się prawidłowo, a użytkownik jest kierowany do indeksu. Może to wskazywać, że użytkownik został w faktycznie zalogowanego ale mam warunkowe sprawdzające że:

{% 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 %} 

I wskazują, że użytkownik nie jest uwierzytelniony.

Cała pomoc jest doceniana dzięki.

EDYCJA: Próbowałem zmienić przekierowanie logowania, aby ustalić, czy faktycznie logował się do użytkownika i wysyłał je do indeksu, ale tak nie jest. Nawet po zmianie przekierowania na inną stronę potwierdzenie nadal wysyła je do indeksu.

Odpowiedz

9

Ustawienia ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True działają tylko wtedy, gdy użytkownik wykonuje akcję rejestracji i weryfikuje wiadomość e-mail w tej samej sesji przeglądarki.

See this code fragment

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

sklepach sesja account_user zmienna, która jest później wykorzystywane w celu sprawdzenia, czy użytkownik powinien zalogować się automatycznie. Jeśli sesja zostanie utracona, nie zadziała.

To gdzie 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) 

Czy to działa dla Ciebie po rejestracji? Jeśli tak, to jest twój problem. Inaczej będziesz musiał kopać głębiej.