Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Creare un form di login

Come creare una pagina di login per l'autenticazione utente tramite username e password nel nostro social network basato sul framework PHP Symfony
Come creare una pagina di login per l'autenticazione utente tramite username e password nel nostro social network basato sul framework PHP Symfony
Link copiato negli appunti

La quasi totalità delle applicazioni Web necessitano di proteggere le pagine attraverso autenticazione con almeno username e password. Anche il nostro social network ha bisogno di servire informazioni diverse in base all’utente che accede. Per questa ragione iniziamo a introdurre il componente Security di Symfony e a inserire la nostra pagina di login.

Lanciamo il seguente comando per installare il componente:

$ composer require symfony/security-bundle

In una situazione normale andremmo a creare il modello dell’utente e il relativo repository per recuperare i dati dal database ma, per adesso, concentriamoci su come funziona il sistema di autenticazione inserendo username e password dell’utente direttamente nella configurazione di Symfony.

Questa impostazione cambierà nelle prossime lezioni ma visto che ancora non abbiamo introdotto alcuni concetti limitiamoci a recuperare le informazioni di login in questo modo.

Per fare ciò useremo il MemoryProvider di Symfony che permette di recuperare le informazioni dell’utente direttamente dalle impostazioni salvate nella configurazione. Apriamo il file app/config/packages/security.yml e aggiungiamo all’inizio del file il seguente codice:

encoders:
  Symfony\Component\Security\Core\User\User: 'auto'

Il componente Security mette a disposizione una classe User di base che per adesso è sufficiente per le nostre esigenze. La regola precedente definisce l’algoritmo che verrà utilizzato per encodare la password. Ora possiamo aprire il terminale e lanciare il comando:

$ php bin/console security:encode-password

Verrà restituita l'hash di una password, teniamola da parte e aggiungiamo all’interno del security.yml la seguente impostazione:

providers:
  backend_users:
    memory:
      users:
        ryan: { password: '<hash>', roles: ['ROLE_USER'] }

in cui andiamo a sostituire il placeholder con l’hash ottenuto. Questa impostazione consentirà di effettuare il login con nome utente ryan e la password selezionata. Nel codice all’interno del tag login-in-memory la password è helloworld.

A questo punto possiamo utilizzare il MakerBundle per creare il form di login, il relativo controller e l’authenticator. Lanciamo il comando con le impostazioni come di seguito:

$ php bin/console make:auth
 What style of authentication do you want? [Empty authenticator]:
  [0] Empty authenticator
  [1] Login form authenticator
 > 1
 The class name of the authenticator to create (e.g. AppCustomAuthenticator):
 > LoginFormAuthenticator
 Choose a name for the controller class (e.g. SecurityController) [SecurityController]:
 > SecurityController
 Enter the User class that you want to authenticate (e.g. App\Entity\User) []:
 > Symfony\Component\Security\Core\User\User
 Do you want to generate a '/logout' URL? (yes/no) [yes]:
 > yes
 created: src/Security/LoginFormAuthenticator.php
 updated: config/packages/security.yaml
 created: src/Controller/SecurityController.php
 created: templates/security/login.html.twig
  Success!
 Next:
 - Customize your new authenticator.
 - Finish the redirect "TODO" in the App\Security\LoginFormAuthenticator::onAuthenticationSuccess() method.
 - Review App\Security\LoginFormAuthenticator::getUser() to make sure it matches your needs.
 - Review & adapt the login template: templates/security/login.html.twig.

I file creati dal comando sono sufficienti per una pagina di login funzionante. Se proviamo a loggarci nella pagina

http://kvak.local/login

con username ryan e password helloworld riceveremo l'eccezione

# TODO: provide a valid redirect inside /var/www/kvak/src/Security/LoginFormAuthenticator.php

E' in realtà una buona notizia perché indica che tutto sta funzionando e che dobbiamo seguire i consigli del comando precedente.

Per effettuare il logout possiamo dirigerci all’indirizzo

http://kvak.local/logout

Il codice della lezione è disponibile con il tag login-in-memory all’interno del repository.

Ti consigliamo anche