Laravel è uno dei frameworks più utilizzati nel campo dello sviluppo web in PHP: creato nel 2011 come derivazione di Symfony da Taylor Otwell è identificato dagli sviluppatori come il framework per “Web artisans” orientato alla programmazione ad oggetti e al pattern MVC.

In questo articolo faremo una carrellata veloce su come realizzare una login con Laravel e sugli strumenti e metodi che mette a disposizione. Per la gestione dell’autenticazione Laravel ha una facade chiamata Auth che ha a disposizione vari metodi:

  • il metodo attempt ci permette di autenticare manualmente un utente passando username e password;
  • il metodo login che riceve in ingresso un oggetto di tipo User come parametro e ne verifica l’accesso;
  • il metodo loginUsingId che richiede l’id dell’utente e lo verifica;
  • il metodo once che permette di autenticare l’utente solamente per la richiesta successiva (utile in caso di API stateless senza sessione).
LE ROUTES

Iniziamo quindi a definire le routes che permettono di autenticare un utente, registrare una sessione e fare il logout di esso. Per quanto riguarda l’esecuzione della login quindi una verifica se l’utente è autorizzato definiamo le seguenti routes:


Route::post('/login', 'LoginController@handleLogin');

Route::get('/login', 'LoginController@login');
LOGIN CONTROLLER

Una volta dichiarate le routes definiamo il controller LoginController che viene richiamato che contiene al suo interno i due metodi login e handleLogin:


namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    public function login()
    {
        if(Auth::check()) {
            return view('pages.loginform');
        }else{
            return redirect('logout');
        }
    }

    public function handleLogin(Request $request)
    {
        $data = $request->only('username','password');

        if (Auth::attempt($data,$request->remember)) {
            return view('home');
        }else{
            return view('pages.loginform')->with(array('error' => 1));
        }
    }
}

Il metodo login controlla se l’utente è autenticato quando inserisce la route /login, altrimenti restituisce all’utente la view con il modulo di login per autenticarlo. Il metodo handleLogin invece effettua il login vero e proprio in chiamata POST, analizzando i campi username e password, ottenendo il campo remember (che è quello della checkbox “Ricordami” nella form di login) per non distruggere la sessione che si attiverà quando si chiude il browser.

Se essi risultano corretti dal metodo attempt (il metodo verifica nel DB l’esistenza di un utente con username e password in input) viene restituita la pagina home altrimenti si ritorna alla view loginform con l’errore numero 1 (login errato).

LOGOUT

Per realizzare un logout invece si può scrivere una funzione del genere all’interno del router:


Route::get('/logout', function(){
    Session::flush();
    Auth::logout();
    return redirect('/loginform');
});

Un’altra caratteristica interessante di Laravel per la gestione della login utente è all’interno del suo motore di template Blade: se abbiamo bisogno di cambiare il comportamento della view, a seconda dello stato di autenticazione, possiamo farlo nel seguente modo con il metodo Auth::check():


@if(Auth::check())
   Benvenuto <b>{{ Auth::user()->name }}</b> <a href="{{ route('logout') }}">Logout</a>
@else
   <a href="{{ route('login') }}">Login</a>
@endif

Il codice scritto è una buona base di studio per avere un’idea di gestione da parte di Laravel dell’autenticazione. Sicuramente il codice può essere modificato e ottimizzato. Se hai delle osservazioni, domande in merito o altro fammelo sapere nei commenti in modo da creare uno scambio di idee insieme e ottimizzare la scrittura del codice.