Slik programmerer du med Yii2 Integrerer brukerregistrering

Hva du skal skape

Hvis du spør, "Hva er Yii?", Sjekk ut min tidligere opplæring: Introduksjon til Yii Framework, som vurderer fordelene med Yii og inneholder en oversikt over hva som er nytt i Yii 2.0, utgitt 12. oktober 2014.

Dette er del fire av en serie på Yii2. I programmering med Yii2: Komme i gang opprettet vi Yii2 lokalt, bygget et Hello World-program, opprettet en ekstern server, og brukte Github til å distribuere koden vår. I del to lærte vi om Yiis implementering av sin Model View Controller-arkitektur og hvordan man bygger nettsider og skjemaer som samler og validerer data. I del tre lærte vi om å jobbe med databaser og ActiveRecord. I denne opplæringen går vi gjennom å integrere et populært brukerregistreringsplugin.

For disse eksemplene fortsetter vi å bygge på vår hei app som er tilgjengelig i Tuts + -arkivet slik at du kan følge med.

Brukerregistrering for webapplikasjonen

Nesten alle webapplikasjoner av hvilken som helst nytte krever noen form for brukerregistrering. Yii gir et par måter å nærme seg brukerregistrering, både relativt grei. Dette er en av tingene jeg liker om å bruke Yii over vanilje PHP-i øyeblikk, jeg kan ha et fullt utstyrt webapplikasjonsramme som er klar til å bygge kule ting på.

Det er få grunner til å gjenoppbygge hjulet og kodebrukerautentisering og dets mange krav og tilhørende funksjoner fra grunnen, f.eks. sende e-post og autentisering for registrering verifisering, passordgjenoppretting, tredjepart sosial godkjenning, et al. 

Yii2 Advanced Application Template gir innebygd brukerregistrering; Vi bruker denne tilnærmingen i min Build Your Startup-serie. Men i denne serien har vi bygd på Yii2s grunnleggende applikasjonsmal. Standard grunnleggende applikasjonsmal inneholder hardkodet brukerlogg, noe som ikke er veldig nyttig.

En annen tilnærming til brukerregistrering er å bruke tredjepartsutvidelser. For denne opplæringen, vil jeg gå deg gjennom med Dmitry Erofeevs Yii2-brukerutvidelse. Dokumentasjon for Yii2-bruker er tilgjengelig her. Erofeev bygger andre plugins for Yii2 også.

Installasjon av Yii2-Bruker

La oss begynne å installere Yii2-brukerutvidelsen. Vi følger installasjonsinstruksjonene.

Installere Yii2-bruker med komponist

Først må vi legge til Yii2-User til komponistens nødvendige utvidelser. Rediger filen /composer.json for å inkludere Yii2-bruker:

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

Da, når vi oppdaterer komponist, ser du noe slikt:

Admins-MacBook-Pro-2: hei Jeff $ composer-oppdatering Laster inn kompositorbeholdninger med pakkeinformasjon Oppdatering av avhengigheter (inkludert krav-dev) - Fjerning av yiisoft / yii2-komponist (2.0.0) - Installering av yiisoft / yii2-komponist (2.0.1 ) Nedlasting: 100% ... - Installering av dektrium / yii2-bruker (v0.8.2) Nedlasting: 100% Skrive låsfil Generere autoload-filer

Oppdater databasen

Deretter kjører vi databasemigrasjonen for Yii2-User. Dette skaper databastabellene som utvidelsen krever. Disse vil administrere brukerkontoer og legitimasjonsbeskrivelser.

hei Jeff $ php Yii Migrer / opp --migrationPath = @ leverandør / dektrium / yii2-bruker / vandringer Yii Migration Tool (basert på Yii v2.0.1) Totalt 6 nye vandringer som skal brukes: 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 Påfør over vandringer? (ja | nei) nei: ja *** bruk m140209_132017_init> opprett tabell % user ... ferdig (tid: 0.010s)> opprett unikt indeks user_unique_username på % user (brukernavn) ... ferdig tid: 0.015s)> opprett unik indeks user_unique_email på % user (email) ... ferdig (tid: 0.012s)> lag unike indeks user_confirmation på % user (id, confirmation_token) ... ferdig 0.011s)> opprett unike indeks user_recovery på % user (id, recovery_token) ... ferdig (tid: 0.010s)> opprett tabell % profile ... ferdig (tid: 0.007s)> legg til utenlandsk nøkkel fk_user_profile : % profile (user_id) referanser % user (id) ... ferdig (tid: 0.010s) *** påført m140209_132017_init (tid: 0,078s) *** bruker m140403_174025_create_account_table> opprett bord % konto ... ferdig (tid: 0.008s)> opprett unik indeks account_unique på % account (leverandør, client_id) ... ferdig (tid: 0.010s)> legg til utenlandsk nøkkel fk_user_account: % account (user_id ) referanser % user (id) ... ferdig (tid: 0.009s) *** anvendt m140403_1740 25_create_account_table (tid: 0,027s) *** bruker m140504_113157_update_tables> dråpeindeks user_confirmation ... ferdig (tid: 0.007s)> dråpeindeks user_recovery ... ferdig (tid: 0.008s)> dråpe kolonne confirmation_token fra tabell % user ... ferdig (tid: 0.009s)> dråpe kolonne confirm_sent_at fra tabell % user ... ferdig (tid: 0.009s)> slipp kolonne recovery_token fra tabell % user ... ferdig (tid: 0.007s)> dråpe kolonne recovery_sent_at fra bordet % user ... ferdig (tid: 0.008s)> slipp kolonne logget_i_fra fra tabell % user ... ferdig (tid: 0.007s)> slipp kolonne logged_in_at fra bordet % user ... ferdig (tid: 0.008s)> omdøpe kolonne registrert_fra i tabell % bruker til registrering_ip ... ferdig (tid: 0.009s)> legg til kolonneflagger heltall IKKE NULL DEFAULT 0 til tabell % user ... ferdig 0.010s)> endre navn på kolonneegenskaper i tabell % account til data ... ferdig (tid: 0.008s) *** påført m140504_113157_update_tables (tid: 0.090s) *** å bruke m140504_130429_create_token_table> c reate table token ... ferdig (tid: 0.006s)> lag unike indeks token_unique på token (user_id, kode, type) ... ferdig (tid: 0.010s)> legg til utenlandsk nøkkel fk_user_token:  % token (user_id) referanser % user (id) ... ferdig (tid: 0.009s) *** brukt m140504_130429_create_token_table (tid: 0,026s) *** bruker m140830_171933_fix_ip_field> endre kolonne registration_ip i tabell  % bruker til bigint ... ferdig (tid: 0,010s) *** brukt m140830_171933_fix_ip_field (tid: 0.011s) *** bruker m140830_172703_change_account_table_name> endre navn tabell % account til social_account ... ferdig : 0.001s) *** brukt m140830_172703_change_account_table_name (tid: 0.002s) Migrert opp med hell.

Oppdater konfigurasjonsfilen

Deretter må vi fortelle Yii å bruke komponenten Yii2-User. I /config/web.php erstatter vi standardbrukerkomponenten ...

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

... med Yii2-bruker-komponenten:

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

Aktiver SwiftMailer

Siden Yii2-bruker bruker e-post for å sende ut registreringsbekreftelser og glemte passord, er det på tide å aktivere SwiftMailer-konfigurasjonen. I config / web.php, erstatt standard Mailer konfigurasjonen her ...

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', // send alle postene til en fil som standard. Du må sette // 'useFileTransport' til falsk og konfigurere en transport // for maileren å sende ekte e-poster. 'useFileTransport' => sann,], 

... med dette-du må inkludere dine egne SMTP-legitimasjon:

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=>' ditt-vert-domene f.eks smtp.gmail.com ',' brukernavn '=>' ditt-e-post eller brukernavn ',' passord '=>' ditt passord ',' port '=>' 587 ',' kryptering '=>' tls ' ,],],

Integrasjon av Yii2-Bruker

Nå må vi koble vår navigasjonslinje til Yii2-brukerens kontrollerbaner. I /views/layouts/main.php oppdaterer vi definisjonen av navigasjonslinjens array for Bootstrap-menyen. Bytt ut den nåværende navigeringslinjen ...

echo Nav :: widget (['options' => ['class' => 'navbar nav navbar-right'], 'items' => [['label' => 'Hjem', 'url' => '/ site / index']], ['label' => 'Status', 'url' => ['/ status / indeks']], ['label' => 'Om', 'url' => '/ site / about']], ['label' => 'Kontakt', 'url' => ['/ nettsted / kontakt']], Yii :: $ app-> user-> isGuest? => 'Logg inn', 'url' => ['/ side / innlogging']]: ['label' => 'Logout (' .Yii :: $ app-> bruker-> identitet-> brukernavn. ') , 'url' => ['/ site / logout'], 'linkOptions' => ['data-metode' => 'innlegg']],],]);

... med følgende arraydefinisjon:

 $ navItems = [['label' => 'Hjem', 'url' => ['/ nettsted / indeks']], ['label' => 'Status', 'url' => ['/ status / indeks ''], ['label' => 'Om', 'url' => ['/ side / om']], ['label' => 'Kontakt', 'url' => ['/ nettsted / kontakt ']]]; hvis Yii :: $ app-> user-> isGuest) array_push ($ navItems, ['label' => 'Logg inn', 'url' => ['/ bruker / login']], ['label' => 'Registrer deg', 'url' => ['/ bruker / registrer']]);  ellers array_push ($ navItems, ['label' => 'Logout (' .Yii :: $ app-> bruker-> identitet-> brukernavn. ')', 'url' => ['/ site / logout' ], 'linkOptions' => ['data-method' => 'innlegg']]);  echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => $ navItems,]); 

Oppdater applikasjonen og klikk på Melde deg på lenke i navigeringsfeltet. Du bør se noe slikt:

Når du klikker Melde deg på, Du får se bekreftelsesvarselet. Dette forteller oss at en e-post er sendt som vi må klikke på for å bekrefte registreringen vår.

Du vil motta en e-post mye som denne:

Klikk på lenken i e-posten, og du vil se noe slikt:

Legg merke til innloggingsstaten som vedlikeholdes av Yii2 og Yii2-User-komponenten - den vises i navigasjonsfeltet ovenfor. Klikk Logg ut og la oss gå gjennom Logg inn side:

Yii2-Bruker inneholder også passordgjenoppretting:

På samme måte har vi en enormt viktig kjernekentifikasjonskomponent for vår applikasjon.

Yii2-Bruker har også en rekke konfigurasjonsfunksjoner som du kan utforske videre på egen hånd, f.eks. tredjepart sosial godkjenning. Vi kommer sannsynligvis tilbake til dem i en senere opplæring.

Hva blir det neste?

Jeg håper du har funnet dette nyttig for din egen Yii2 webapplikasjon. Hvis du vil vite når neste Yii2 opplæring kommer, følg meg @ reifman på Twitter eller sjekk min instruktørside. Min instruktørside vil inkludere alle artiklene fra denne serien så snart de er publisert.

Relaterte linker

  • Yii2-bruker på Github
  • Yii2-brukerdokumentasjon
  • Yii Framework Website
  • Introduksjon til Yii Framework (Tuts +)
  • Andre gratis og åpen kildekode-utviklereksempler av instruktøren