2013-03-22 13 views
8

Esistono app per django per forzare la password dell'utente scaduta dopo un intervallo di 30 giorni? Sto usando l'auth di djangp e voglio estenderlo o usare un'app community.Django force password expiration

Quello che ho provato finora:

  1. aggiunto un campo al profilo utente per la memorizzazione della data dell'ultimo aggiornamento della password.
  2. Esteso il metodo di accesso per verificare questa data e reindirizzare l'utente alla pagina di modifica della password.

Cosa Sono confuso su:

  1. per bloccare l'utente che accede al sito fino a quando la password viene modificata.
  2. L'utente non dovrebbe essere in grado di accedere o semplicemente digitare urls per accedere direttamente alla pagina.

Si noti che non voglio utilizzare il middleware in quanto sarà un vincolo di risorse.

risposta

9

Sembri sulla buona strada. Impostare la data dell'ultima password aggiornata, controllare se il timedelta è superiore a 30 giorni, in tal caso reindirizzare alla pagina di modifica della password. La tua vista di accesso dovrebbe rimanere essenzialmente la stessa eccetto che in realtà non effettua il login dell'utente all'oggetto richiesta se timedelta è maggiore di 30 giorni.

from datetime import date, timedelta 
from django.contrib.auth import authenticate, login 

def my_view(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(username=username, password=password) 
    if user is not None: 
     if user.is_active: 
      if date.today() - user.password_date > timedelta(days=30): 
       # Redirect to password change page 
      else: 
       login(request, user) 
       # Redirect to a success page. 
     else: 
      # Return a 'disabled account' error message 
    else: 
    # Return an 'invalid login' error message. 
+0

Questo ha un senso, Matt. Ci proverò. Grazie –