2015-01-31 24 views
7

Documentazione: https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.loginQual è la differenza tra l'autenticazione e l'accesso?

Quando si sta accedendo manualmente un utente, è necessario chiamare l'autenticazione() prima di chiamare login(). authenticate() imposta un attributo sull'utente notando quale backend di autenticazione ha autenticato correttamente quell'utente (vedere la documentazione dei backend per i dettagli), e queste informazioni sono necessarie in seguito durante il processo di login. Verrà generato un errore se si tenta di accedere direttamente a un oggetto utente recuperato dal database.

Allora, perché è esattamente authenticate e login 2 funzioni separate? Da quanto ho capito, authenticate verifica solo le informazioni di accesso. login prenderà l'oggetto utente e imposterà i cookie. L'unica ragione per cui posso pensare che siano separati è perché forse puoi inserire diversi oggetti utente, ad esempio l'utente ha 2 account uniti. Forse vuoi verificare prima l'indirizzo email. È per questo che sono funzioni separate e login non esegue il wrapping authenticate?

risposta

3

Questa è una questione di principio di responsabilità singola: un metodo dovrebbe fare una cosa logica. Come hai notato tu stesso, questi due passaggi hanno logicamente distinti:

authenticate verifica solo le informazioni di accesso. login avrà l'oggetto utente e impostare i cookie

Per chiarire ulteriormente, l'autenticazione è un controllo di una volta, e non implica una sessione di login. Una sessione di accesso implica un periodo di tempo durante il quale l'utente è libero di eseguire varie attività riservate senza controlli di autenticazione ripetuti.

A volte potrebbe essere necessario autenticare gli utenti (verificare che siano chi dicono di essere) senza di loro l'accesso. Se queste due funzionalità sono stati combinati in un unico, non sarebbe in grado di farlo, anche se volevi solo fare un controllo una tantum, dovresti collegarli, creando una sessione, che non avrebbe senso. Poiché questi sono scopi chiaramente distinti, ha perfettamente senso avere due metodi.

La separazione facilita anche i test. Se hai ragione di un nuovo back-end di autenticazione, vorresti essere in grado di verificare se il passaggio di autenticazione funziona o no, senza doversi preoccupare di come funziona l'intero sistema di login, il che non è semplicemente la responsabilità del tuo back-end.

Scomporre i metodi ai loro elementi logicamente più piccoli indipendenti è la cosa più sensata da fare, con molti vantaggi.

3

In termini semplici,

autenticazione si riferisce alla verifica delle credenziali dell'utente considerando login riferisce alla creazione di una sessione quando le credenziali dell'utente è stata verificata (autenticato)

Problemi correlati