2014-06-10 13 views
5

Sto utilizzando django-allauth nel mio progetto django e capisco che ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION è impostato su True per impostazione predefinita. Sfortunatamente l'utente non ha effettuato il login automaticamente alla conferma, quindi ho impostato esplicitamente questa impostazione su True. Sfortunatamente l'utente non ha ancora effettuato l'accesso quando conferma la sua email. Le mie impostazioni allauth:Django allauth non effettua l'accesso dell'utente all'e-mail conferma

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 

conferma L'email reindirizza anche non vengono attivati ​​correttamente e l'utente viene instradato verso l'indice. Questo può indicare che l'utente è in infatti loggato ma ho condizionali verificando che:

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

e indicano che l'utente non è autenticato.

Tutti gli aiuti sono apprezzati grazie.

MODIFICA: ho provato a modificare il reindirizzamento di accesso per determinare se era effettivamente l'accesso dell'utente e inviarlo all'indice, ma non lo è. Anche quando ho cambiato il reindirizzamento dell'accesso a una pagina diversa, la conferma li invia ancora all'indice.

risposta

9

Le impostazioni ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True funzionano solo quando l'utente esegue un'azione di registrazione e verifica l'e-mail nella stessa sessione del browser.

See this code fragment

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

La sessione memorizza account_user variabile che viene poi utilizzata per verificare se l'utente deve essere registrato automaticamente. Se la sessione è persa, non funzionerà.

Questo è dove il 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) 

funziona per voi proprio dopo l'iscrizione? Se sì, questo è il tuo problema. Altrimenti dovrai scavare più a fondo.

Problemi correlati