Cum se programează cu Yii2 Integrarea înregistrării utilizatorilor

Ce veți crea

Dacă întrebiți "Ce este Yii?", Verificați tutorialul meu anterior: Introducere în Cadrul Yii, care examinează beneficiile lui Yii și include o imagine de ansamblu a ceea ce este nou în Yii 2.0, lansat la 12 octombrie 2014.

Aceasta este o parte patru dintr-o serie pe Yii2. În programarea cu Yii2: Noțiuni de bază, am creat Yii2 la nivel local, am construit o aplicație Hello World, am creat un server la distanță și am folosit Github pentru a implementa codul nostru. În partea a doua, am aflat despre implementarea de către Yii a arhitecturii Model View Controller și despre modul de a construi pagini web și formulare care colectează și validează datele. În partea a treia am învățat despre lucrul cu bazele de date și ActiveRecord. În acest tutorial, vă vom ajuta să vă integrați un plug-in popular de înregistrare a utilizatorilor.

Pentru aceste exemple, vom continua să construim pe baza aplicației noastre de salut disponibile în depozitul Tuts +, astfel încât să puteți urmări.

Înregistrarea utilizatorilor pentru aplicația Web

Aproape orice aplicație web de orice utilitate necesită o formă de înregistrare a utilizatorului. Yii oferă câteva modalități de abordare a înregistrării utilizatorilor, atât relativ simplu. Acesta este unul dintre lucrurile pe care îmi place să-l folosesc pe Yii peste vanilie PHP-in momente, pot avea un cadru de aplicații web complet featured gata pentru a construi lucruri reale pe.

Există puține motive pentru a reconstrui autentificarea roților și a codului de utilizator și a numeroaselor cerințe și caracteristici corolar de la zero, de ex. trimiterea de e-mailuri și autentificarea pentru verificarea înregistrării, recuperarea parolei, autentificarea socială a terților, et al. 

Șablonul de aplicație avansată Yii2 oferă o înregistrare integrată a utilizatorilor; noi folosim această abordare în seria Building your Startup. Cu toate acestea, în această serie, am construit șablonul de bază al aplicației Yii2. Șablonul de bază implicit pentru aplicație include autentificarea codată a utilizatorului, care nu este foarte utilă.

O altă abordare a înregistrării utilizatorilor este utilizarea extensiilor terților. Pentru acest tutorial, vă voi ajuta să folosiți extensia Yii2-User a lui Dmitry Erofeev. Documentația pentru Yii2-Utilizator este disponibilă aici. Erofeev construiește și alte pluginuri pentru Yii2.

Instalarea utilizatorului Yii2

Să începem să instalăm extensia Yii2-User. Vom urma instrucțiunile de instalare.

Instalarea utilizatorului Yii2 cu compozitor

În primul rând, trebuie să adăugăm Yii2-User la extensiile necesare ale compozitorului. Editați fișierul /composer.json pentru a include Yii2-User:

 "*", "yiisoft / yii2-bootstrap": "*", "yiisoft / yii2-swiftmailer": "*" , "dektrium / yii2-user": "*",

Atunci când actualizăm compozitorul, veți vedea ceva de genul:

Administratori-MacBook-Pro-2: salut update Jeff $ compozitor Încărcare depozite de compozitori cu informații despre pachete Actualizarea dependențelor (inclusiv required-dev) - Înlăturarea compozitorului yiisoft / yii2 (2.0.0) - Instalarea compozitorului yiisoft / yii2 ) Descărcarea: 100% ... - Instalarea dektrium / yii2-user (v0.8.2) Descărcarea: 100% Fișier de blocare de scriere Generarea fișierelor autoload

Actualizați baza de date

Apoi rulam migrarea bazei de date pentru Yii2-User. Aceasta creează tabelele bazei de date pe care extensia o cere. Acestea vor gestiona conturile de utilizator și acreditările.

salut Jeff $ Yii php / up --migrationPath Migrați = @ furnizor / dektrium / yii2-user / migrări Yii Migration Tool (bazat pe Yii v2.0.1) Un total de 6 noi migrații care urmează să fie aplicate: 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 Se aplică cele de mai sus migrări? (da: nu): da *** aplicând m140209_132017_init> crează tabelul % user ... done (time: 0.010s)> crează indexul unic user_unique_username pe user% time: 0.015s)> a crea indexul unic user_confirmation pe % user (id, confirmation_token) ... done (time: 0.015s) 0.011s)> creare tabel % profile ... done (time: 0.007s)> adăugați cheie străină fk_user_profile : % profile (user_id) referințe user user (done) done% contul ... făcut (timpul: 0,008s)> a crea indexul unic account_unique pe % account (furnizor, client_id) ... done (time: 0.010s)> add key fk_user_account: account account ) referințe % user (id) ... făcut (timpul: 0.009s) *** aplicat m140403_1740 25_create_account_table (timp: 0.027s) *** aplicarea m140504_113157_update_tables> indexul de drop user_confirmation ... done (time: 0.007s)> indexul de drop user_recovery ... done (time: 0.008s)> drop column confirmation_token din tabelul user% (timp: 0,009s)> coloana de expirare confirmation_sent_at din tabelul % user ... done (time: 0,009s)> coloana de recuperare recovery_token din tabelul % user ... coloana de recuperare recovery_sent_at din tabel % user ... done (time: 0.008s)> coloana drop_logged_in_from din tabelul % user ... done (time: 0.007s) (timp: 0,008s)> adăugați coloana de coloană register_from în tabel % user până la registration_ip ... done (time: 0.009s)> add column flags integer NOT NULL DEFAULT 0 to table user user 0.010s)> redenumirea proprietăților coloanei din tabel % account pentru datele ... done (time: 0.008s) *** aplicate m140504_113157_update_tables (time: 0.090s) *** aplicarea m140504_130429_create_token_table> c (time: 0.010s)> a adăuga cheia străină fk_user_token: token a făcut tabelul % token time token referințe user_id % user (id) ... făcut (timpul: 0.009s) *** aplicat m140504_130429_create_token_table (time: 0.026s) *** aplicarea m140830_171933_fix_ip_field> % user pentru bigint ... done (time: 0.010s) *** aplicat m140830_171933_fix_ip_field (time: 0.011s) *** aplicarea m140830_172703_change_account_table_name> redenumirea tabelului % account pentru social_account : 0.001s) *** aplicat m140830_172703_change_account_table_name (timp: 0.002s) Migrați cu succes.

Actualizați fișierul de configurare

Apoi, trebuie să-i spunem lui Yii să folosească componenta Yii2-User. În /config/web.php, înlocuim componenta implicită a utilizatorului ...

 'user' => ['identityClass' => 'app \ models \ Utilizator', 'enableAutoLogin' => true,], 

... cu componenta Yii2-User:

 'user' => ['class' => 'dektrium \ user \ Module', 'enableUnconfirmedLogin' => true, 'confirmWithin' => 21600, 'cost' => 12, 'admins' => ['admin'] ], 

Activați dispozitivul SwiftMailer

Deoarece utilizatorul Yii2 utilizează e-mailuri pentru a trimite confirmări de înregistrare și parole uitate, este timpul să activați configurația SwiftMailer. În config / web.php, înlocuiți configurația implicită Mailer aici ...

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', // trimiteți toate e-mailurile la un fișier în mod implicit. Trebuie să setați // 'useFileTransport' la false și să configurați un transport // pentru ca mailer să trimită e-mailuri reale. 'useFileTransport' => true,], 

... cu aceasta - va trebui să includeți propriile dvs. acreditări SMTP:

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer' Swift_SmtpTransport ',' host '=>' de exemplu, domeniul dvs.-gazdă smtp.gmail.com ',' username '=>' your-email-or-username ',' password '=>' your-password ',' port '=>' 587 ' ,],],

Integrarea utilizatorului Yii2

Acum, trebuie să conectăm bara noastră de navigare la căile controlerului Yii2-User. În /views/layouts/main.php actualizăm definiția matricei barei de navigare pentru meniul Bootstrap. Înlocuiți bara de navigare curentă ...

echo Nav :: widget (['opțiuni' => ['class' => 'navbar-nav navbar-right'], 'items' => [[ '/' / '/' / '/' / '/'), ' '/' / '/']], ['label' => 'Contact', 'url' => ['/ site / contact']], Yii :: $ app-> user-> isGuest? => 'Logare', 'url' => ['/ site / login']]: ['label' => , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'post']],],]);

... cu următoarea definiție a matricei:

 $ navItems = [['label' => 'Pagina de pornire', 'url' => ['/ site / index']], ['label' => '], [' label '=>' Despre ',' url '=> [' / site / about ']] ]]]; dacă yii :: $ app-> user-> isGuest) array_push ($ navItems, ['label' => 'Login', 'url' => [' => 'Înscrieți-vă', 'url' => ['/ user / register']]);  altceva array_push ($ navItems, ['label' => 'Logout ('. Yii :: $ app-> user-> identitate-> nume utilizator. ], 'linkOptions' => ['data-method' => 'post']]);  echo Nav :: widget (['opțiuni' => ['class' => 'navbar-nav navbar-right'], 'items' => $ navItems,]); 

Reîncărcați aplicația și faceți clic pe Inscrie-te în bara de navigare. Ar trebui să vedeți ceva de genul:

Când faceți clic pe Inscrie-te, veți vedea notificarea de confirmare. Acest lucru ne spune că a fost trimis un e-mail pe care trebuie să faceți clic pentru a verifica înregistrarea noastră.

Veți primi un e-mail asemănător cu acesta:

Faceți clic pe linkul din e-mail și veți vedea ceva de genul:

Observați starea de conectare menținută de Yii2 și componenta Yii2-User - este afișată în bara de navigare de mai sus. Clic Deconectare și să trecem prin Conectare pagină:

Utilizatorul Yii2 include, de asemenea, recuperarea parolei:

Doar așa, avem o componentă de autentificare de bază extrem de importantă pentru aplicația noastră.

Utilizatorul Yii2 are, de asemenea, o serie de caracteristici de configurare pe care le puteți explora pe cont propriu, de ex. autentificare socială terță parte. Ne vom întoarce probabil într-un tutorial mai târziu.

Ce urmeaza?

Sper că ați găsit acest lucru util pentru propria dvs. aplicație web Yii2. Dacă doriți să știți când vine următorul tutorial Yii2, urmați-mă @reifman pe Twitter sau verificați pagina de instructor. Pagina mea de instructor va include toate articolele din această serie de îndată ce vor fi publicate.

Link-uri conexe

  • Yii2-Utilizator la Github
  • Yii2-User Documentation
  • Site-ul web Yii
  • Introducere în Cadrul Yii (Tuts +)
  • Alte exemple de dezvoltatori gratuite și Open Source Yii de către instructor
Cod