2016-04-08 27 views
8

(io sono un principiante di laravel)Laravel 5.2: fare qualcosa dopo che l'utente ha effettuato l'accesso?

sto usando Laravel 5.2. Ho abilitato con successo l'autenticazione; facendo il php artisan make:auth e gli animali.

Quindi il mio accesso funziona.

Ora ho bisogno di fare qualcosa dopo che qualcuno ha il login per vedere un esempio semplice:.

LOGIN:

  • Una volta che un utente si è connesso, scrivere un valore in sessione.
  • Ad esempio: $request->session()->put('UserAgent', $ClientUserAgent);

Esci:

  • Stessa cosa da fare, una volta che un utente è disconnesso, eliminare il valore di sessione personalizzato.
  • Ad esempio: $request->session()->forget('UserAgent');

non sono sicuro se ci sono (cose come) hooks o Event Listeners, Event Handlers, o qualcosa del genere.

Come posso farlo per favore?

risposta

1

Alief's Answer seguito funziona bene come previsto.Ma come ho cercato su Google, usando gli Event Handler è probabilmente il modo più preferito. (Funziona come un amo personalizzato).

Quindi, senza alcun rispetto per la risposta di Alief qui sotto, lasciami scegliere ->this Event Handers approach ho appena scoperto.

Grazie a tutti per quanto riguarda!

+0

Nessun problema di accoppiamento, ho anche imparato qualcosa di nuovo dalla tua domanda :) – Alief

7

Per il login post, è possibile farlo modificando App/HTTP/Controller/Aut/AuthController.php

Aggiungi autenticato() in quella classe per ignorare quello di default:

protected function authenticated(Request $request, User $user){ 
    //put your thing in here 

    return redirect()->intended($this->redirectPath()); 
} 

includere anche questo nella classe:

use Illuminate\Http\Request; 

Per il logout, aggiungere questa funzione nella stessa classe:

protected function getLogout() 
{ 
    Auth::logout(); 

    //do something here 

    return redirect('/'); 
} 

e comprendono anche questo nella classe:

use Auth; 
+0

Ermm .. Grazie mille! Ma nella funzione, ho davvero bisogno di mettere tutte queste cose? Non posso semplicemente mettere la mia 1 riga di codice di salvataggio della sessione solo. (Voglio dire, non capisco cosa fanno i tuoi codici) –

+0

Oh, mi spiace, solo per esempio, aspetta fammi modificare .. – Alief

+0

Grazie ancora :)) Ma ho questi errori: 'ErrorException in AuthController.php line 98: l'argomento 1 passato ad App \ Http \ Controllers \ Auth \ AuthController :: authenticated() deve essere un'istanza di App \ Http \ Controllers \ Auth \ Request, istanza di Illuminate \ Http \ Request fornita, chiamata in/var/www /html/example.com/vendor/laravel/framework/src/Illuminate/Foundation/Aut h/AuthenticatesUsers.php sulla riga 115 e definito' –

3

Si potrebbe provare a impostare listener di eventi per gli eventi Auth che vengono sparati.

È possibile impostare un listener che ascolti Illuminate\Auth\Events\Login per gestire quello che è necessario il login e Illuminate\Auth\Events\Logout per il logout.

Laravel Docs - Authentication - Events

+0

In realtà preferisco in questo modo di più. Ma ogni volta che provo questo, mi dà errori. Dopo aver registrato l'evento in EventServiceProvider (come questo: ''Illuminate \ Auth \ Events \ Login' => ['App \ Listeners \ UserLoggedIn'],', non riesco a scrivere su Session dal mio 'app \ Listeners \ UserLoggedIn.php 'file. Nella funzione' handle di funzione pubblica (Login $ event) {...} '. La sessione non può essere avviata da lì. –

+0

Forse ho creato una nuova domanda separatamente. Puoi aiutarci a saltare lì? per favore: http://stackoverflow.com/questions/36493760/laravel-5-2-how-to-access-request-session-classes-from-own-event-listener –

1

Perché non semplice controllo per

if(Auth::check()){ 
    //your code 
} 

Assicurati di includere use Auth;

+0

Semplicemente interessante!: D Ma da dove? in 'routes.php'?) Ma poi come gestire effettivamente gli eventi' Login', e anche 'Logout' con questo, plsss? –

+0

Puoi usarlo nelle tue visualizzazioni. Come se volessi mostrare/mostrare una vista a l'utente che ha effettuato l'accesso quindi collega quella vista con in se body. –

+0

Awwwn, ho capito cosa intendi. Ma poi questo non può gestire gli eventi, amico. o eseguire alcuni codici particolari, una volta che l'utente ha effettuato il login. –

1

Per le versioni più recenti di laravel

Se sei solo facendo qualcosa di molto semplice quindi la creazione di un gestore di eventi sembra eccessivo per me. Laravel ha un metodo vuoto incluso nella classe AuthenticatesUsers per questo scopo.

Il posto giusto il seguente metodo all'interno app\Http\Controllers\LoginController (override di esso):

protected function authenticated(Request $request, $user) 
{ 
    // stuff to do after user logs in 
}