2015-08-16 14 views
6

Uso i controller di autenticazione incorporati di Laravel 5.0. Tuttavia, vorrei aggiungere alcune azioni durante l'accesso oltre all'autenticazione, ad esempio aggiornando un'altra tabella. Non riesco a trovare dove dovrei scrivere un codice del genere, però.Laravel 5 - modifica l'azione di login predefinita

Per la registrazione ho aggiunto quello che volevo nel file "Registrar.php" nella cartella "Servizi". Come posso farlo per il login?

Grazie in anticipo.

risposta

4

È possibile inserire la seguente funzione in AuthController.php per sovrascrivere la funzione predefinita dal tratto AuthenticatesAndRegistersUsers. E puoi cambiarlo secondo le tue necessità.

/** 
* Handle a login request to the application. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function postLogin(Request $request) 
{ 
    $this->validate($request, [ 
     'email' => 'required|email', 'password' => 'required', 
    ]); 
    $credentials = $request->only('email', 'password'); 
    if ($this->auth->attempt($credentials, $request->has('remember'))) 
    { 
     return redirect()->intended($this->redirectPath()); 
    } 
    return redirect($this->loginPath()) 
       ->withInput($request->only('email', 'remember')) 
       ->withErrors([ 
        'email' => $this->getFailedLoginMessage(), 
       ]); 
} 
+0

codice Copia da un tratto non è l'opzione migliore. La logica di autenticazione nel tratto potrebbe cambiare nelle versioni future e non si rifletterà nel codice. Laravel genera eventi quando gli utenti vengono autenticati e questi devono essere utilizzati per separare la logica di autenticazione da azioni aggiuntive che devono essere eseguite. –

+0

Vedere un esempio di utilizzo degli eventi di autenticazione nella risposta –

+1

@ jedrzej.kurylo Concordato. Ho completamente dimenticato gli eventi. Gli eventi sono il posto migliore per collegare il tuo codice. su votato. –

4

strato authentiction di laravel generato l'evento multiplo quando diverse azioni di autenticazione legati accadere:

  • auth.attempt - quando l'utente tenta di autenticare
  • auth.login - quando l'utente autentica correttamente
  • auth.logout - quando l'utente logout

È possibile ascoltare per quegli eventi (auth.login nel tuo caso) e applicare le azioni necessarie senza copiare un codice da un tratto, che renderebbe di aggiornare il codice manualmente se alcune modifiche capita come funziona l'autenticazione.

In primo luogo, è necessario creare una classe ascoltatore:

class AuthLoginHandler { 
    public function handle(User $user, $remember) { 
    // do whatever you need to do after user authenticates 
    } 
} 

quindi registrare l'ascoltatore nel vostro EventServiceProvider classe:

protected $listen = [ 
    'auth.login' => [ 
     AuthLoginHandler::class 
    ], 
]; 

del vostro gestore handle() metodo sarà ora chiamato ogni volta che l'utente effettua l'autenticazione, anche se si dispone di più moduli di accesso per diversi tipi di utenti o anche di altre forme di autenticazione rispetto a un modulo.

Potete leggere di più sugli eventi in laravel qui: http://laravel.com/docs/5.1/events#defining-listeners

+0

Grazie per il tempo dedicato a rispondere. Dove dovrei collocare quella classe ascoltatrice? Qualche cartella specifica di laravel? –

+0

Ovunque si preferisca, purché lo spazio dei nomi corrisponda alla struttura delle directory in modo che possa essere caricato automaticamente. Nei documenti mettono gli ascoltatori in app/ascoltatori, quindi puoi fare lo stesso –

+0

Qualche motivo per cui il metodo 'AuthLoginHandler @ handle' non viene attivato all'accesso? Ho fatto tutto come descritto nella risposta, ma il metodo non viene eseguito dopo il login. Spero di perdere qualcosa di essenziale qui. (Laravel 5.2) – dbr