Als je vraagt, "Wat is Yii?", Bekijk dan mijn eerdere tutorial: Introductie tot het Yii Framework, die de voordelen van Yii beoordeelt en een overzicht bevat van wat er nieuw is in Yii 2.0, uitgebracht op 12 oktober 2014.
Dit is deel vier van een serie over Yii2. In Programming With Yii2: Getting Started hebben we Yii2 lokaal ingesteld, een Hello World-applicatie gebouwd, een externe server opgezet en Github gebruikt om onze code te implementeren. In deel twee hebben we geleerd over Yii's implementatie van de Model View Controller-architectuur en hoe je webpagina's en formulieren kunt bouwen die gegevens verzamelen en valideren. In deel drie leerden we over het werken met databases en ActiveRecord. In deze zelfstudie helpen we u bij het integreren van een populaire plug-in voor gebruikersregistratie.
Voor deze voorbeelden blijven we voortbouwen op onze hello-app die beschikbaar is in de Tuts + -opslagplaats, zodat u deze kunt volgen.
Bijna elke webapplicatie met enig nut vereist enige vorm van gebruikersregistratie. Yii biedt een aantal manieren om gebruikersregistratie te benaderen, beide relatief eenvoudig. Dit is een van de dingen die ik leuk vind aan het gebruik van Yii over vanille PHP-in momenten, ik kan een volledig uitgerust webapplicatieframe hebben klaar om coole dingen te bouwen op.
Er zijn enkele redenen om het wiel opnieuw te bouwen en gebruikersauthenticatie te coderen en de vele vereisten en bijbehorende functies van de grond af, bijv. verzenden van e-mails en authenticatie voor registratie-verificatie, wachtwoordherstel, sociale authenticatie door derden, et al.
De geavanceerde toepassingssjabloon van Yii2 biedt ingebouwde gebruikersregistratie; we gebruiken deze aanpak in mijn Building Your Startup-serie. In deze reeks hebben we echter voortgebouwd op de basistoepassingssjabloon van Yii2. De standaard basistoepassingssjabloon bevat hard-gecodeerde gebruikersaanmelding, wat niet erg handig is.
Een andere benadering voor gebruikersregistratie is om extensies van derden te gebruiken. Voor deze zelfstudie laat ik je kennismaken met de Yii2-gebruikersextensie van Dmitry Erofeev. Documentatie voor Yii2-gebruiker is hier beschikbaar. Erofeev bouwt ook andere plug-ins voor Yii2.
Laten we beginnen met het installeren van de Yii2-User-extensie. We volgen de installatie-instructies.
Allereerst moeten we Yii2-gebruiker toevoegen aan de vereiste extensies van de componist. Bewerk het bestand /composer.json met Yii2-gebruiker:
"require": "php": "> = 5.4.0", "yiisoft / yii2": "*", "yiisoft / yii2-bootstrap": "*", "yiisoft / yii2-swiftmailer": "*" , "dektrium / yii2-user": "*",
Wanneer u vervolgens de composer bijwerkt, ziet u iets als dit:
Admins-MacBook-Pro-2: hallo Jeff $ composer update Bezig met laden van composer-repositories met pakketinformatie Bijwerken van afhankelijkheden (inclusief require-dev) - Verwijderen van yiisoft / yii2-composer (2.0.0) - Installeren van yiisoft / yii2-composer (2.0.1 ) Downloaden: 100% ... - Installeren van dektrium / yii2-user (v0.8.2) Downloaden: 100% Schrijfslotbestand Autoload-bestanden genereren
Vervolgens voeren we de databasemigratie uit voor Yii2-gebruiker. Hiermee worden de databasetabellen gemaakt die voor de extensie zijn vereist. Deze zullen gebruikersaccounts en inloggegevens beheren.
hello Jeff $ php yu migrate / omhoog --migrationPath = @ verkoper / dektrium / yii2-user / migraties Yii Migration Tool (gebaseerd op Yii v2.0.1) Totaal 6 nieuwe migraties toe te passen: 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 Breng de bovenstaande migraties? (ja | nee) [nee]: ja *** toepassen m140209_132017_init> tabel maken % user ... klaar (tijd: 0.010s)> unieke index user_unique_username maken op % user (gebruikersnaam) ... klaar ( tijd: 0.015s)> maak unieke index user_unique_email op % user (email) ... done (time: 0.012s)> creëer unieke index user_confirmation op % user (id, confirmation_token) ... done (time: 0.011s)> maak een unieke index user_recovery op % user (id, recovery_token) ... done (time: 0.010s)> maak een tabel % profile ... done (tijd: 0.007s)> voeg een buitenlandse sleutel toe fk_user_profile : % profile (user_id) referenties % user (id) ... done (time: 0.010s) *** applied m140209_132017_init (time: 0.078s) *** apply m140403_174025_create_account_table> create table % account ... klaar (tijd: 0.008s)> maak unieke index account_unique aan op % account (provider, client_id) ... done (time: 0.010s)> voeg buitenlandse sleutel toe fk_user_account: % account (user_id ) referenties % user (id) ... done (tijd: 0.009s) *** toegepast m140403_1740 25_create_account_table (tijd: 0.027s) *** apply m140504_113157_update_tables> drop-index user_confirmation ... done (time: 0.007s)> drop-index user_recovery ... done (time: 0.008s)> drop column confirmation_token from table % user ... klaar (tijd: 0.009s)> drop column confirmation_sent_at van table % user ... done (time: 0.009s)> drop column recovery_token van table % user ... done (time: 0.007s)> drop column recovery_sent_at van tabel % user ... klaar (tijd: 0.008s)> drop column logged_in_from van table % user ... done (time: 0.007s)> drop column logged_in_at van table % user ... klaar (tijd: 0.008s)> naam kolom in register_from in tabel % user in registration_ip ... done (tijd: 0.009s)> kolomvlaggen integer NIET NOT NULL DEFAULT 0 in tabel % user ... klaar (tijd: 0.010s)> eigenschappen kolomnaam in tabel % account wijzigen in gegevens ... gereed (tijd: 0.008s) *** toegepast m140504_113157_update_tables (tijd: 0.090s) *** apply m140504_130429_create_token_table> c reate table % token ... done (time: 0.006s)> unieke index token_unique maken op % token (user_id, code, type) ... done (time: 0.010s)> foreign key toevoegen fk_user_token: % token (user_id) referenties % user (id) ... done (tijd: 0.009s) *** toegepast m140504_130429_create_token_table (tijd: 0.026s) *** apply m140830_171933_fix_ip_field> wijzig kolom registration_ip in tabel % user naar bigint ... done (time: 0.010s) *** applied m140830_171933_fix_ip_field (time: 0.011s) *** apply m140830_172703_change_account_table_name> hernoemen tabel % account naar % social_account ... klaar (time : 0.001s) *** toegepast m140830_172703_change_account_table_name (time: 0.002s) Migratie succesvol uitgevoerd.
Vervolgens moeten we Yii vertellen dat hij de component Yii2-gebruiker moet gebruiken. In /config/web.php vervangen we de standaardgebruikerscomponent ...
'gebruiker' => ['identityClass' => 'app \ modellen \ Gebruiker', 'enableAutoLogin' => waar,],
... met de component Yii2-gebruiker:
'user' => ['class' => 'dektrium \ user \ Module', 'enableUnconfirmedLogin' => true, 'confirmWithin' => 21600, 'cost' => 12, 'admins' => ['admin'] ],
Omdat Yii2-gebruiker e-mail gebruikt om registratiebevestigingen en vergeten wachtwoorden te verzenden, is het tijd om onze SwiftMailer-configuratie te activeren. Vervang in config / web.php hier de standaard Mailer-configuratie ...
'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', // verstuur alle mails standaard naar een bestand. Je moet // 'useFileTransport' instellen op false en een transport // configureren voor de mailer om echte e-mails te verzenden. 'useFileTransport' => waar,],
... hiermee - u moet uw eigen SMTP-inloggegevens opnemen:
'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=>' uw-host-domein bijvoorbeeld smtp.gmail.com ',' gebruikersnaam '=>' uw e-mail-of-gebruikersnaam ',' wachtwoord '=>' uw-wachtwoord ',' poort '=>' 587 ',' versleuteling '=>' tls ' ,],],
Nu moeten we onze navigatiebalk koppelen aan de Yii2-User controllerpaden. In /views/layouts/main.php werken we de definitie van de navigatiebalkarray voor het Bootstrap-menu bij. Vervang de huidige navigatiebalk ...
echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Home', 'url' => [ '/ site / index']], ['label' => 'Status', 'url' => ['/ status / index']], ['label' => 'Over', 'url' => [ '/ site / about']], ['label' => 'Contact', 'url' => ['/ site / contact']], Yii :: $ app-> user-> isGuest? ['label' => 'Inloggen', 'url' => ['/ site / login']]: ['label' => 'Uitloggen ('. Yii :: $ app-> gebruiker-> identiteit-> gebruikersnaam. ')' , 'url' => ['/ site / logout'], 'linkOptions' => ['data-methode' => 'post']],],]);
... met de volgende arraydefinitie:
$ navItems = [['label' => 'Home', 'url' => ['/ site / index']], ['label' => 'Status', 'url' => ['/ status / index ']], [' label '=>' Over ',' url '=> [' / site / over ']], [' label '=>' Contact ',' url '=> [' / site / contact ']]]; if (Yii :: $ app-> user-> isGuest) array_push ($ navItems, ['label' => 'Aanmelden', 'url' => ['/ user / login']], ['label' => 'Aanmelden', 'url' => ['/ user / register']]); else array_push ($ navItems, ['label' => 'Afmelden ('. Yii :: $ app-> gebruiker-> identiteit-> gebruikersnaam. ')', 'url' => ['/ site / logout' ], 'linkOptions' => ['data-methode' => 'plaatsen']]); echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => $ navItems,]);
Laad de applicatie opnieuw en klik op de Inschrijven link in de navigatiebalk. Je zou zoiets als dit moeten zien:
Wanneer u klikt Inschrijven, je ziet de bevestigingsmelding. Dit vertelt ons dat er een e-mail is verzonden waarop we moeten klikken om onze registratie te verifiëren.
U ontvangt een e-mail zoals deze:
Klik op de link in de e-mail en je ziet zoiets als dit:
Let op de inlogstatus die wordt onderhouden door Yii2 en de Yii2-gebruikerscomponent: deze wordt weergegeven in de navigatiebalk hierboven. Klik Uitloggen en laten we door de Aanmelden pagina:
Yii2-User bevat ook wachtwoordherstel:
Net als dat, hebben we een enorm belangrijke kernauthenticatiecomponent voor onze applicatie.
Yii2-gebruiker heeft ook een aantal configuratiefuncties die u verder zelf kunt verkennen, bijvoorbeeld sociale authenticatie door derden. We zullen waarschijnlijk in een later zelfstudie naar hen terugkeren.
Ik hoop dat je dit nuttig hebt gevonden voor je eigen Yii2-webapplicatie. Als je wilt weten wanneer de volgende Yii2-handleiding aankomt, volg me dan @reifman op Twitter of bekijk mijn instructeurspagina. Op mijn instructeurspagina staan alle artikelen uit deze serie zodra ze zijn gepubliceerd.