6

Sto cercando di capire come migliorare il metodo di autenticazione con funzionalità aggiuntive.Override del metodo di autenticazione - Django admin

ad es.

  • in scadenza password
  • formati speciali di password
  • requisiti di lunghezza
  • ecc ...

E 'piuttosto semplice per frontend del sito, ma per quanto riguarda il pannello di amministrazione?


mi sa che avrei dovuto ignorare oggetto Manager per l'utente, come l'autenticazione probabilmente vi risiede. Questo è abbastanza difficile da capire.

Grazie in anticipo! :)

risposta

6

È possibile creare un back-end di autenticazione personalizzato seguendo le istruzioni in http://docs.djangoproject.com/en/dev/topics/auth/#authentication-backends. In sostanza, si crea una classe di back-end che ha un metodo authenticate:

class MyBackend: 
    def authenticate(self, username=None, password=None): 
     # Check the username/password and return a User. 

Quindi aggiungere alla classe di AUTHENTICATION_BACKENDS in settings.py.

Anche se questo è per l'autenticazione, è possibile eseguire tutte le convalide delle password che hai menzionato semplicemente reindirizzando un utente a una pagina di modifica della password se la password è corretta ma è scaduta, ad esempio. Prendi in considerazione l'utilizzo di messaging framework per dare a un utente un suggerimento su cosa sta succedendo quando lo indirizza a una pagina di modifica generica della password.

+0

Ciao hai coperto praticamente tutto: O Questa è una buona risposta! Grazie mille. – RadiantHex

+0

Ciao Sto implementando il backend auth, sono un po 'confuso riguardo ai segnali. Non c'è modo che io possa implementare una corretta validazione all'interno dell'amministratore? – RadiantHex

+0

@RadiantHex Mi scuso per la parte del segnale django. Non è applicabile nel tuo caso, dal momento che non puoi leggere la password grezza dal modello (è già stata sottoposta a hash) e quindi non puoi effettuare la tua convalida. Il suggerimento di Jordan su dirottare la pagina delle password su una vista personalizzata è migliore. Hai solo bisogno di dirottare tutte le pagine che possono cambiare la password. Un altro approccio è provare [monkey-patching] (http://stackoverflow.com/questions/192649/can-you-monkey-patch-methods-on-core-types-in-python) del metodo 'set_password' del Modello 'Utente'. –

1

Se si desidera che la password di convalida sia incorporata nel modello, è probabile che si desideri extend the django User model.

In caso contrario, si potrebbe fare le seguenti:

  • opzioni sovrascrivono le password di amministrazione creando i propri punti di vista per la modifica e l'impostazione di password, poi mettere l'URL corrispondente, appena sopra (r'^admin/', include(admin.site.urls)). Regex assomiglierebbe a (r'^admin/auth/user/(\d+)/password/', new_change_password).
  • Tieni traccia dell'età della password in un modello separato e poi quando scadono, reindirizza a una password di modifica una volta scaduta.
+0

Ciao grazie per la tua risposta! – RadiantHex

+0

Ciao Sto trovando questa risposta più utile in realtà, hai un indizio su come inoltrare una vista alla vista di modifica della password? – RadiantHex

+0

Intendi un reindirizzamento? È possibile utilizzare 'HttpResponseRedirect' per reindirizzare l'utente all'URL per la pagina di modifica della password. Penso che se guardi il file url per django/contrib/auth, puoi trovare quale URL usare. –