Autenticazione con Devise

L'autenticazione consiste nella verifica dell'identità dell'utente.
La aggiungeremo alla nostra applicazione sfruttando la gem "devise"... inseriscila in fondo al Gemfile:

Installala quindi con
bundle install

Se l'installazione è andata buon fine prepara la configurazione con
rails g devise:install

Segui quindi le indicazioni che saranno visualizzate. In particolare...

Configurare i link delle email inviate da devise

Ricordati di cambiare nell'esempio qui sopra il numero di porta.

 

Definire una rotta "root"



Fare in modo che le notifiche siano visibili in tutte le pagine

Generare il model per gli utenti

rails g devise User

Con questo comando chiediamo a devise di generare per noi una migrazione che creerà un nuovo model, denominato User, che conterrà nome utente e password di tutti gli utenti, oltre a eventuali dati aggiuntivi.

Possiamo aggiungere alla migrazione un campo booleano che specifica se un utente è amministratore (false di default!):


Applichiamo la migrazione:
rails db:migrate

Preparare l'uso con Turbo

Decommenta e modifica queste righe dell'initializer di devise, che ci permetteranno di integrare devise con le funzionalità avanzate di Rails 7:

Predisporre uno scaffold per gestire gli utenti

rails g scaffold_controller User email:string admin:boolean


Le rotte generate da devise_for :users devono apparire prima di quelle generate dallo scaffold (resources :users), o si verificherà un problema richiedendo l'autenticazione per il controller Users:

Definire un'area riservata

Richiedi che l'utente sia autenticato prima di accedere al controller della tua area riservata:
Nota che l'autenticazione sarà richiesta per tutte le azioni di questo controller, eccetto show: in questo modo anche gli utenti non loggati avranno accesso alle schede dei libri.

Tradurre i messaggi di devise

Basta creare un file config/locales/devise.it.yml
e inserire le traduzioni, che si trovano qui:
https://gist.github.com/iwan/91c724774594c8b484c95ff1db5d1a15

Personalizzare le viste di devise

Copia le viste di devise in modo da poterle personalizzare in un secondo momento:
rails g devise:views

Troverai in questa la cartella le varie viste da personalizzare:

Esse si riferiscono ai vari casi:
  • conferma di un utente
  • invio di email all'utente
  • modifica della password
  • registrazione di un nuovo utente
  • login dell'utente
  • sblocco dell'utente

La cartella shared contiene un partial con i link che compaiono in tutte queste pagine.

Riavviare Foreman

Dato che abbiamo aggiunto un initializer, che è un componente che viene usato all'avvio dell'applicazione, riavvia Foreman in modo che possa utilizzarlo.

Prova ora ad accedere all'area riservata da
http://127.0.0.1:3058/books

Ti sarà richiesto di loggarti... se non hai ancora un utente dovrai crearlo.

Ottenere l'utente corrente

Puoi ottenere i dati dell'utente corrente usando l'oggetto current_user in una qualunque delle tue viste:
Nota che visualizziamo il benvenuto solo se l'utente è loggato (user_signed_in).
 

Creare un link per il logout

Dopo aver verificato se l'utente è loggato (user_signed_in?) puoi creare un link per il logout, magari nella navbar:
 

Approfondimento

Solo per curiosità personale: se volessi far inviare le email di conferma di devise attraverso la tua casella Gmail...
 Dalla configurazione della tua casella poi dovresti abilitare l'accesso IMAP: