Gestione degli errori di accesso con la classe utente

2

Abbiamo una classe utente che gestisce tutte le cose relative agli utenti all'interno di un sistema di gestione dei contenuti. Come previsto, la classe contiene una funzione login() . Questa funzione accetta tre argomenti: $username , $password e $remember (il secondo predefinito a true ).

La mia domanda è: qual è il modo migliore per gestire gli errori di accesso in modo che possano essere visualizzati all'utente? Stiamo utilizzando un modello MVC personalizzato qui, quindi abbiamo controller e visualizzazioni che devono rimanere astratti dalla classe stessa. Ho identificato le seguenti soluzioni possibili:

  1. Restituisce interi con segno dalla funzione login() che può essere interpretata all'interno del controller.
  2. Aggiungi una variabile all'oggetto User contenente il messaggio di errore in testo semplice
  3. Emetti l'errore direttamente dall'interno della chiamata di funzione

Il punto 3 è discutibile, dato che non lo faremo (l'output di accoppiamento con una classe == cattivo).

Il punto 2 sembra essere il più logico, ma renderà difficile la multi-lingua (una funzionalità che potrebbe essere aggiunta in seguito). Ad esempio, potremmo fare qualcosa di simile:

class User
{
    public $loginError;

    public function login($username, $password, $remember = true)
    {
        if($password !== $ourStoredPassword)
        {
            $this->loginError = 'Password does not match';
            return false;
        }
    }
}

Penso che l'opzione migliore sia la # 1. Ad esempio, potremmo farlo all'interno della classe:

class User
{
    public function login($username, $password, $remember = true)
    {
        if($password !== $ourStoredPassword)
        {
            return -1;
        }
    }
}

Quindi, all'interno del nostro controller, basta guardare il valore restituito da login() e gestirlo in esso. Quali sono i pensieri delle persone? C'è un modo migliore per affrontare questo?

    
posta BenM 19.02.2014 - 14:52
fonte

2 risposte

6

Perché non creare una serie di oggetti Exception per gli errori di accesso come UserNotFoundException e PasswordIncorrectException.

È quindi possibile generare le eccezioni nel metodo di accesso quando qualcosa non va a buon fine.

Dovresti quindi rilevare questa Eccezione all'interno del tuo Controller e mostrare l'output all'utente a seconda dei casi. Questo approccio rimuove l'accoppiamento tra l'errore e il messaggio che si desidera visualizzare.

link

    
risposta data 19.02.2014 - 16:32
fonte
0

Quando si tratta di errori di accesso degli utenti, consiglio un semplice valore di ritorno vero / falso.

Fornendo informazioni aggiuntive al di sopra e al di là del successo o dell'insuccesso, comunichi a potenziali utenti malintenzionati quali nomi sono associati al sistema (indovinando continuamente i nomi e registrando i risultati dell'errore). Se gli indirizzi e-mail possono essere utilizzati come accesso, rischi di lasciare che spambots scannerizzi il tuo sistema per ottenere indirizzi email validi.

Inoltre, questo aiuta ad aderire al principio KISS; meno parti mobili hai meno probabilità di rompere più tardi. Se si programmano diverse cose attorno a un sistema di errore dettagliato e si decide di modificarlo in un secondo momento, potrebbe interrompersi in altre aree.

Se il sistema restituisce "nome utente o password errati", le persone sanno di ricontrollare le loro informazioni. E dal momento che dovrebbe cancellare la password tra i tentativi, gli utenti potranno solo controllare il nome comunque.

    
risposta data 21.02.2014 - 03:55
fonte

Leggi altre domande sui tag