Hur man programmerar med Yii2 Integrerar användarregistrering

Vad du ska skapa

Om du frågar, "Vad är Yii?", Kolla in min tidigare handledning: Introduktion till Yii Framework, som granskar fördelarna med Yii och innehåller en översikt över vad som är nytt i Yii 2.0, släppt 12 oktober 2014.

Detta är del fyra i en serie på Yii2. I programmering med Yii2: Komma igång startade vi Yii2 lokalt, byggde ett Hello World-program, startade en fjärrserver och använde Github för att distribuera vår kod. I del två lärde vi oss om Yii: s genomförande av sin Model View Controller-arkitektur och hur man bygger webbsidor och formulär som samlar in och validerar data. I del tre lärde vi oss om att arbeta med databaser och ActiveRecord. I denna handledning går vi igenom att integrera ett populärt användarregistreringsprogram.

För dessa exempel fortsätter vi med att bygga på vår hej app som finns tillgänglig i Tuts + -förteckningen, så att du kan följa med.

Användarregistrering för din webbapplikation

Nästan alla webbapplikationer av någon användbarhet kräver någon form av användarregistrering. Yii ger ett par sätt att närma sig användarregistrering, både relativt enkelt. Detta är en av de saker jag tycker om att använda Yii över vaniljens PHP-in-stunder, jag kan ha en heltäckande webbapplikationsram som är redo att bygga svala saker på.

Det finns få skäl att bygga upp hjulet och kodens användarautentisering och dess många krav och följdfunktioner från början, t.ex. skicka e-post och autentisering för registrering verifiering, lösenord återhämtning, tredje part social autentisering, et al. 

Yii2 Advanced Application Template ger inbyggd användarregistrering; Vi använder detta tillvägagångssätt i min Building Your Startup-serie. Men i denna serie har vi byggt på Yii2s grundläggande applikationsmall. Standardbaserad applikationsmall innehåller hårdkodad användarinloggning, vilket inte är särskilt användbart.

Ett annat tillvägagångssätt för användarregistrering är att använda tredjepartsutvidgningar. För denna handledning går jag igenom dig genom att använda Dmitry Erofeevs Yii2-användarutvidgning. Dokumentation för Yii2-användare finns här. Erofeev bygger andra plugins för Yii2 också.

Installation av Yii2-användare

Låt oss börja installera Yii2-användarutvidgningen. Vi följer installationsanvisningarna.

Installera Yii2-användare med kompositör

Först måste vi lägga till Yii2-användare till kompositörens nödvändiga tillägg. Redigera filen /composer.json för att inkludera Yii2-användare:

 "*", "yiisoft / yii2-bootstrap": "*", "yiisoft / yii2-swiftmailer": "*" , "dektrium / yii2-användare": "*",

Då, när vi uppdaterar kompositören ser du något så här:

Admins-MacBook-Pro-2: hej Jeff $ composer uppdatering Laddar kompositregister med paketinformation Uppdatering av beroenden (inklusive krav-dev) - Ta bort yiisoft / yii2-kompositör (2.0.0) - Installera yiisoft / yii2-kompositören (2.0.1 ) Nedladdning: 100% ... - Installera dektrium / yii2-användare (v0.8.2) Hämta: 100% Skriva låsfil Generera autoload-filer

Uppdatera databasen

Därefter kör vi databas migreringen för Yii2-User. Detta skapar databastabellerna som förlängningen kräver. Dessa kommer att hantera användarkonton och referenser.

hello Jeff $ php Yii flytta / upp --migrationPath = @ försäljaren / dektrium / yii2-användare / migreringar Yii Migration Tool (baserat på Yii v2.0.1) Totalt 6 nya migreringar som skall tillämpas: 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 Applicera ovan migreringar? (ja | nej) nej: ja *** tillämpa m140209_132017_init> skapa tabell % user ... gjort (tid: 0.010s)> skapa unikt index user_unique_username på % user (användarnamn) ... gjort tid: 0.015s)> skapa unikt index user_unique_email på % user (email) ... gjort (tid: 0.012s)> skapa unikt index user_confirmation på % user (id, confirmation_token) 0.011s)> skapa unikt index user_recovery på % user (id, recovery_token) ... gjort (tid: 0.010s)> skapa tabell % profile ... done (tid: 0.007s)> lägg till främmande nyckel fk_user_profile id konto ... gjort (tid: 0.008s)> skapa unikt index account_unique på % account (provider, client_id) ... gjort (tid: 0.010s)> lägg till främmande nyckel fk_user_account: % account (user_id ) referenser % user (id) ... gjort (tid: 0.009s) *** applied m140403_1740 25_create_account_table (tid: 0.027s) *** tillämpning m140504_113157_update_tables> drop index user_confirmation ... done (tid: 0.007s)> drop index user_recovery ... done (tid: 0.008s)> släpp kolumn confirmation_token från bordet % user ... done (tid: 0.009s)> släpp kolumn confirmation_sent_at från bordet % user ... gjort (tid: 0.009s)> släpp kolumn recovery_token från bordet % user ... gjort (tid: 0.007s)> släpp kolumn recovery_sent_at från bordet % user ... gjort (tid: 0.008s)> släpp kolumn loggad_in_from från bordet % user ... gjort (tid: 0.007s)> släpp kolumn logged_in_at från bordet % user ... done (tid: 0.008s)> byt kolumn registrerad_from i tabellen % user till registration_ip ... done (tid: 0.009s)> lägg till kolumn flaggor heltal INTE NULL DEFAULT 0 till tabell % user ... gjort 0.010s)> byt namn på kolumnegenskaper i tabellen % account till data ... gjort (tid: 0.008s) *** tillämpas m140504_113157_update_tables (tid: 0.090s) *** ansöker m140504_130429_create_token_table> c reate table token ... gjort (tid: 0.006s)> skapa unikt index token_unique på token (user_id, code, typ) ... färdig (tid: 0.010s)> lägg till främmande nyckel fk_user_token:  % token (user_id) referenser % user (id) ... gjort (tid: 0.009s) *** tillämpas m140504_130429_create_token_table (tid: 0.026s) *** ansöker m140830_171933_fix_ip_field> ändra kolumn registration_ip i tabellen  % användare till bigint ... gjort (tid: 0.010s) *** tillämpas m140830_171933_fix_ip_field (tid: 0.011s) *** ansöker m140830_172703_change_account_table_name> byt namn på bordet % account till social_account ... gjort : 0.001s) *** tillämpas m140830_172703_change_account_table_name (tid: 0.002s) Migrerad framgångsrikt.

Uppdatera konfigurationsfilen

Därefter måste vi berätta för Yii att använda komponenten Yii2-User. I /config/web.php ersätter vi den vanliga användarkomponenten ...

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

... med komponenten Yii2-användare:

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

Aktivera SwiftMailer

Eftersom Yii2-användare använder e-post för att skicka ut registreringsbekräftelser och glömda lösenord, är det dags att aktivera vår SwiftMailer-konfiguration. I config / web.php, ersätt standard Mailer-konfigurationen här ...

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', // skickar alla mail till en fil som standard. Du måste ställa in // 'useFileTransport' till fel och konfigurera en transport // för mailaren att skicka riktiga e-postmeddelanden. 'useFileTransport' => true], 

... med det här måste du inkludera dina egna SMTP-uppgifter:

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=>' din värd-domän t.ex. smtp.gmail.com ',' användarnamn '=>' ditt-email-eller-användarnamn ',' lösenord '=>' ditt lösenord ',' port '=>' 587 ',' kryptering '=>' tls ' ,],],

Integration av Yii2-användare

Nu måste vi länka vår navigeringsfält till Yii2-användarens kontrollvägar. I /views/layouts/main.php uppdaterar vi definitionen av navigeringsfältet för Bootstrap-menyn. Byt ut den aktuella navigeringsfältet ...

echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Hem', 'url' => '/ site / index']], ['label' => 'Status', 'url' => ['/ status / index']], ['label' => 'Om', 'url' => '/ site / about']], ['label' => 'Kontakt', 'url' => ['/ webbplats / kontakt']], Yii :: $ app-> user-> isGuest? => 'Logga in', 'url' => ['/ site / login']]: ['label' => 'Logga ut (' .Yii :: $ app-> user-> identity-> användarnamn. ') , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'inlägg']],],]);

... med följande array definition:

 $ navItems = [['label' => 'Hem', 'url' => ['/ site / index']], ['label' => 'Status', 'url' => ['/ status / index '], [' label '=>' Om ',' url '=> [' / webbplats / om ']], [' label '=>' Kontakt ',' url '=> [' / webbplats / kontakt ']]]; om Yii :: $ app-> user-> isGuest) array_push ($ navItems, ['label' => 'Logga in', 'url' => ['/ user / login']], ['label' => 'Registrera', 'url' => ['/ användare / registrera']]);  else array_push ($ navItems, ['label' => 'Logga ut (' .Yii :: $ app-> user-> identity-> användarnamn. ')', 'url' => ['/ site / logout' ], 'linkOptions' => ['data-method' => 'post']]));  echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => $ navItems,]); 

Ladda om programmet och klicka på Bli Medlem länk i navigeringsfältet. Du borde se något så här:

När du klickar Bli Medlem, Du får se bekräftelsemeddelandet. Detta berättar för oss att ett mail har skickats som vi måste klicka på för att verifiera vår registrering.

Du får ett mail så mycket som det här:

Klicka på länken i e-postmeddelandet och så ser du något på följande sätt:

Observera inloggningsstaten som underhålls av Yii2 och komponenten Yii2-User-den visas i navigeringsfältet ovan. Klick Logga ut och låt oss gå igenom Logga in sida:

Yii2-användaren innehåller också lösenordåterställning:

Precis som det har vi en enormt viktig kärnverifierings komponent för vår applikation.

Yii2-Användaren har också ett antal konfigurationsfunktioner som du kan utforska vidare på egen hand, t.ex. tredje partens sociala autentisering. Vi kommer troligen att återvända till dem i en senare handledning.

Vad kommer härnäst?

Jag hoppas att du har hittat detta användbart för din egen Yii2 webbapplikation. Om du vill veta när nästa Yii2 handledning kommer, följ mig @ reifman på Twitter eller kolla min instruktörssida. Min instruktörssida kommer att innehålla alla artiklar från denna serie så snart de publiceras.

relaterade länkar

  • Yii2-Användare på Github
  • Yii2-användardokumentation
  • Yii Framework Website
  • Introduktion till Yii Framework (Tuts +)
  • Andra Gratis och Open Source Yii Developer-exempel av instruktören