Se stai chiedendo "Cos'è Yii?", Consulta il mio precedente tutorial: Introduzione al framework Yii, che rivede i vantaggi di Yii e include una panoramica delle novità di Yii 2.0, rilasciata il 12 ottobre 2014.
Questa è la quarta parte di una serie su Yii2. In Programming With Yii2: Getting Started, abbiamo configurato Yii2 localmente, creato un'applicazione Hello World, configurato un server remoto e utilizzato Github per implementare il nostro codice. Nella seconda parte, abbiamo appreso dell'implementazione di Yii della sua architettura Model View Controller e di come creare pagine Web e moduli che raccolgono e convalidano i dati. Nella terza parte, abbiamo imparato a lavorare con i database e ActiveRecord. In questo tutorial, ti guideremo attraverso l'integrazione di un popolare plug-in per la registrazione degli utenti.
Per questi esempi, continueremo a costruire sulla nostra app hello disponibile nel repository Tuts + in modo da poter seguire.
Quasi tutte le applicazioni web di qualsiasi utilità richiedono una qualche forma di registrazione dell'utente. Yii fornisce un paio di modi per affrontare la registrazione degli utenti, entrambi relativamente semplici. Questa è una delle cose che mi piacciono nell'usare Yii su vanilla PHP-in momenti, posso avere un framework per applicazioni web completo pronto per creare cose interessanti su.
Ci sono pochi motivi per ricostruire la ruota e codificare l'autenticazione dell'utente e i suoi numerosi requisiti e caratteristiche di corollario da zero, ad es. invio di e-mail e autenticazione per la verifica della registrazione, il recupero della password, l'autenticazione sociale di terze parti, ecc.
Il modello di applicazione avanzato Yii2 fornisce la registrazione dell'utente integrata; stiamo usando questo approccio nella mia serie Building Your Startup. Tuttavia, in questa serie, abbiamo basato sul modello di applicazione di base di Yii2. Il modello di applicazione di base predefinito include il login utente con codice hard, che non è molto utile.
Un altro approccio alla registrazione dell'utente è l'uso di estensioni di terze parti. Per questo tutorial, ti guiderò attraverso l'estensione Yii2-User di Dmitry Erofeev. La documentazione per Yii2-User è disponibile qui. La costruzione di Erofeev ha anche altri plugin per Yii2.
Iniziamo ad installare l'estensione Yii2-User. Seguiremo le istruzioni di installazione.
Per prima cosa, dobbiamo aggiungere Yii2-User alle estensioni richieste del compositore. Modifica il file /composer.json per includere Yii2-User:
"require": "php": "> = 5.4.0", "yiisoft / yii2": "*", "yiisoft / yii2-bootstrap": "*", "yiisoft / yii2-swiftmailer": "*" , "dektrium / yii2-user": "*",
Quindi, quando aggiorniamo il compositore, vedrai qualcosa del genere:
Admins-MacBook-Pro-2: ciao Jeff $ compositore update Caricamento repository di composer con informazioni sul pacchetto Aggiornamento delle dipendenze (incluso require-dev) - Rimozione di yiisoft / yii2-compositore (2.0.0) - Installazione di yiisoft / yii2-compositore (2.0.1 ) Download: 100% ... - Installazione di dektrium / yii2-user (v0.8.2) Download: 100% Scrittura di un file di blocco Generazione di file di caricamento automatico
Successivamente, eseguiamo la migrazione del database per Yii2-User. Questo crea le tabelle del database richieste dall'estensione. Questi gestiranno account utente e credenziali.
ciao Jeff $ php Yii Migrazione / fino --migrationPath = @ vendor / dektrium / yii2-utente / migrazioni Yii Migration Tool (basata su Yii v2.0.1) Trovati 6 nuove migrazioni da applicare: m140209_132017_init m140403_174025_create_account_table m140504_113157_update_tables m140504_130429_create_token_table m140830_171933_fix_ip_field m140830_172703_change_account_table_name Applicare quanto sopra migrazioni? (sì | no) [no]: sì *** applicando m140209_132017_init> Crea tabella % user ... done (time: 0.010s)> crea un indice univoco user_unique_username su % user (username) ... done ( time: 0.015s)> crea un indice univoco user_unique_email su % user (email) ... done (time: 0.012s)> crea un indice univoco user_confirmation su % user (id, confirmation_token) ... done (time: 0.011s)> crea un indice univoco user_recovery su % user (id, recovery_token) ... done (time: 0.010s)> crea la tabella % profile ... done (time: 0.007s)> aggiungi la chiave esterna fk_user_profile : % profile (user_id) riferimenti % user (id) ... done (time: 0.010s) *** applicato m140209_132017_init (time: 0.078s) *** applicando m140403_174025_create_account_table> create table % account ... done (time: 0.008s)> crea un indice univoco account_unique su % account (provider, client_id) ... terminato (tempo: 0.010s)> aggiungi chiave esterna fk_user_account: % account (user_id ) riferimenti % user (id) ... done (time: 0.009s) *** applicato m140403_1740 25_create_account_table (time: 0.027s) *** applicando m140504_113157_update_tables> drop index user_confirmation ... done (time: 0.007s)> drop index user_recovery ... done (time: 0.008s)> drop column confirm_token dalla tabella % user ... done (time: 0.009s)> drop column confirm_sent_at dalla tabella % user ... done (time: 0.009s)> drop column recovery_token dalla tabella % user ... done (time: 0.007s)> drop column recovery_sent_at dalla tabella % user ... done (time: 0.008s)> drop column logged_in_from dalla tabella % user ... done (time: 0.007s)> drop column logged_in_at dalla tabella % user ... fatta (time: 0.008s)> rinomina la colonna registered_from nella tabella % user in registration_ip ... done (time: 0.009s)> aggiungi i flag di colonna integer NOT NULL DEFAULT 0 nella tabella % user ... done (time: 0.010s)> rinomina le proprietà della colonna nella tabella % account in data ... done (time: 0.008s) *** applicato m140504_113157_update_tables (time: 0.090s) *** applicando m140504_130429_create_token_table> c reate table % token ... done (time: 0.006s)> crea un indice univoco token_unique su % token (user_id, code, type) ... done (time: 0.010s)> aggiungi chiave esterna fk_user_token: % token (user_id) riferimenti % user (id) ... done (time: 0.009s) *** applicato m140504_130429_create_token_table (time: 0.026s) *** applicando m140830_171933_fix_ip_field> alter column registration_ip nella tabella % utente a bigint ... done (time: 0.010s) *** applicato m140830_171933_fix_ip_field (time: 0.011s) *** applicando m140830_172703_change_achange_account_name> rinomina tabella % account a % social_account ... fatto (tempo : 0.001s) *** applicato m140830_172703_change_account_table_name (time: 0.002s) Migrato con successo.
Quindi, dobbiamo dire a Yii di usare il componente Yii2-User. In /config/web.php, sostituiamo il componente Utente predefinito ...
'utente' => ['identityClass' => 'app \ models \ User', 'enableAutoLogin' => true,],
... con il componente Yii2-User:
'user' => ['class' => 'dektrium \ user \ Module', 'enableUnconfirmedLogin' => true, 'confirmWithin' => 21600, 'cost' => 12, 'admins' => ['admin'] ],
Poiché l'utente Yii2 utilizza l'e-mail per inviare conferme di registrazione e password dimenticate, è ora di attivare la configurazione di SwiftMailer. In config / web.php, sostituisci la configurazione predefinita Mailer qui ...
'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', // invia tutti i messaggi a un file per impostazione predefinita. Devi impostare // 'useFileTransport' su false e configurare un trasporto // per il mailer per inviare email reali. 'useFileTransport' => true,],
... con questo-avrai bisogno di includere le tue credenziali SMTP:
'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=>' tuo-host-dominio es smtp.gmail.com ',' username '=>' your-email-or-username ',' password '=>' your-password ',' port '=>' 587 ',' encryption '=>' tls ' ,],],
Ora, dobbiamo collegare la nostra barra di navigazione ai percorsi del controller Yii2-User. In /views/layouts/main.php, aggiorniamo la definizione dell'array della barra di navigazione per il menu Bootstrap. Sostituisci la barra di navigazione attuale ...
echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Home', 'url' => [ '/ site / index']], ['label' => 'Status', 'url' => ['/ status / index']], ['label' => 'About', 'url' => [ '/ site / about']], ['label' => 'Contatti', 'url' => ['/ sito / contatto']], Yii :: $ app-> utente-> isGuest? ['etichetta' => 'Login', 'url' => ['/ site / login']]: ['label' => 'Esci ('. Yii :: $ app-> utente-> identità-> nome utente. ')' , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'post']],],]);
... con la seguente definizione di array:
$ navItems = [['label' => 'Home', 'url' => ['/ sito / indice']], ['etichetta' => 'Stato', 'url' => ['/ stato / indice ']], [' label '=>' About ',' url '=> [' / site / about ']], [' label '=>' Contatti ',' url '=> [' / sito / contatto ']]]; if (Yii :: $ app-> user-> isGuest) array_push ($ navItems, ['label' => 'Accedi', 'url' => ['/ utente / login']], ['etichetta' => 'Registrati', 'url' => ['/ utente / registrati']]); else array_push ($ navItems, ['label' => 'Logout ('. Yii :: $ app-> user-> identity-> username. ')', 'url' => ['/ site / logout' ], 'linkOptions' => ['data-method' => 'post']]); echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => $ navItems,]);
Ricaricare l'applicazione e fare clic su Iscriviti link nella barra di navigazione. Dovresti vedere qualcosa di simile a questo:
Quando si fa clic Iscriviti, vedrai la notifica di conferma. Questo ci dice che è stata inviata una email che dobbiamo cliccare per verificare la nostra registrazione.
Riceverai un'email simile a questa:
Fai clic sul link nell'email e vedrai qualcosa di simile a questo:
Si noti lo stato di accesso gestito da Yii2 e il componente Yii2-User, che viene visualizzato nella barra di navigazione in alto. Clic Disconnettersi e passiamo attraverso il Registrati pagina:
Yii2-User include anche il recupero della password:
Proprio così, abbiamo un componente di autenticazione core estremamente importante per la nostra applicazione.
Yii2-User ha anche un numero di funzioni di configurazione che puoi esplorare ulteriormente da solo, ad es. autenticazione sociale di terze parti. Probabilmente torneremo a loro in un tutorial successivo.
Spero che tu abbia trovato questo utile per la tua applicazione web Yii2. Se vuoi sapere quando arriverà il prossimo tutorial di Yii2, seguimi @reifman su Twitter o controlla la mia pagina di istruttore. La mia pagina di istruttore includerà tutti gli articoli di questa serie non appena saranno pubblicati.