Wenn Sie fragen "Was ist Yii?", Lesen Sie mein früheres Tutorial: Einführung in das Yii-Framework, Hier werden die Vorteile von Yii erläutert und eine Übersicht über die Neuerungen in Yii 2.0, veröffentlicht am 12. Oktober 2014, gegeben.
Dies ist der vierte Teil einer Serie zu Yii2. Bei der Programmierung mit Yii2: Erste Schritte haben wir Yii2 lokal eingerichtet, eine Hello World-Anwendung erstellt, einen Remote-Server eingerichtet und Github zur Bereitstellung unseres Codes verwendet. In Teil zwei haben wir erfahren, wie Yii seine Model View Controller-Architektur implementiert und wie Webseiten und Formulare erstellt werden, die Daten sammeln und validieren. In Teil drei haben wir gelernt, mit Datenbanken und ActiveRecord zu arbeiten. In diesem Tutorial führen wir Sie durch die Integration eines beliebten Plugins für die Benutzerregistrierung.
Für diese Beispiele bauen wir auf unserer Hallo-App auf, die im Tuts + -Repository verfügbar ist, damit Sie mitverfolgen können.
Nahezu jede nützliche Webanwendung erfordert eine Form der Benutzerregistrierung. Yii bietet eine Reihe von Möglichkeiten zur Benutzerregistrierung, die beide relativ unkompliziert sind. Dies ist eines der Dinge, die ich an der Verwendung von Yii über Vanilla PHP-In-Momenten mag. Ich kann ein voll funktionsfähiges Webanwendungs-Framework haben, auf dem Sie coole Sachen erstellen können.
Es gibt wenige Gründe, die Benutzer- und Code-Benutzerauthentifizierung und ihre vielen Anforderungen und Folgemerkmale von Grund auf neu aufzubauen, z. Versenden von E-Mails und Authentifizierung zur Überprüfung der Registrierung, Wiederherstellung von Passwörtern, Social Authentication bei Dritten, ua.
Die Yii2 Advanced Application Template bietet eine integrierte Benutzerregistrierung. Wir verwenden diesen Ansatz in meiner Serie "Building Your Startup". In dieser Serie haben wir jedoch auf die grundlegende Anwendungsvorlage von Yii2 aufgebaut. Die Standardvorlage für Standardanwendungen enthält eine hart codierte Benutzeranmeldung, was nicht sehr nützlich ist.
Ein weiterer Ansatz für die Benutzerregistrierung besteht in der Verwendung von Erweiterungen von Drittanbietern. In diesem Tutorial werde ich Sie mit der Erweiterung Yii2-User von Dmitry Erofeev durchgehen. Dokumentation für Yii2-User ist hier verfügbar. Erofeev baut auch andere Plugins für Yii2.
Beginnen wir mit der Installation der Yii2-User-Erweiterung. Wir folgen den Installationsanweisungen.
Zuerst müssen wir Yii2-User zu den erforderlichen Erweiterungen des Composers hinzufügen. Bearbeiten Sie die Datei /composer.json, um Yii2-User einzuschließen:
"erfordern": "php": "> = 5.4.0", "yiisoft / yii2": "*", "yiisoft / yii2-bootstrap": "*", "yiisoft / yii2-swiftmailer": "*" , "dektrium / yii2-user": "*",
Wenn wir dann den Composer aktualisieren, wird Folgendes angezeigt:
Admins-MacBook-Pro-2: Hallo Jeff $ composer-Update Laden von Composer-Repositorys mit Paketinformationen Aktualisieren von Abhängigkeiten (einschließlich requir-dev) - Entfernen von yiisoft / yii2-composer (2.0.0) - Installieren von yiisoft / yii2-composer (2.0.1.) ) Herunterladen: 100%… - dektrium / yii2-user installieren (v0.8.2) Herunterladen: 100% Sperrdatei schreiben Generiert Autoload-Dateien
Als Nächstes führen wir die Datenbankmigration für Yii2-User aus. Dadurch werden die Datenbanktabellen erstellt, die für die Erweiterung erforderlich sind. Diese verwalten Benutzerkonten und Anmeldeinformationen.
Hallo Jeff $ php yii migrate / up --migrationPath = @ Verkäufer / dektrium / yii2-Benutzer / Migrationen Yü Migration Tool (basierend auf Yü v2.0.1) Insgesamt 6 neue Migrationen anzuwenden: 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 gelten die obigen Migrationen? (Ja | Nein) [Nein]: Ja *** m140209_132017_init anwenden> Tabelle erstellen % user ... done (Zeit: 0.010s)> eindeutigen Index erstellen user_unique_username unter % user (Benutzername) ... done ( time: 0.015s)> Erstellen Sie einen eindeutigen Index user_unique_email für % user (E-Mail)… fertig (Zeit: 0.012s)> Erstellen Sie einen eindeutigen Index user_confirmation für % user (ID, Confirmation_token)… done (Uhrzeit: 0.011s)> Erstellen Sie einen eindeutigen Index user_recovery für % user (id, recovery_token)… done (Zeit: 0.010s)> Erstellen Sie die Tabelle % profile ... done (Zeit: 0.007s)> Fügen Sie den Fremdschlüssel fk_user_profile hinzu : % profile (user_id) referenziert % user (id)… done (Zeit: 0.010s) *** angewendet m140209_132017_init (Zeit: 0.078s) *** Anwendung von m140403_174025_create_account_table> Tabelle erstellen % account ... done (Zeit: 0,008s)> eindeutigen Index account_unique für % account (provider, client_id) ... done (Zeit: 0.010s) erstellen> Fremdschlüssel hinzufügen fk_user_account: % account (user_id ) referenziert % user (id)… done (Zeit: 0,009s) *** angewendet m140403_1740 25_create_account_table (Zeit: 0,027s) *** m140504_113157_update_tables anwenden> Index löschen user_confirmation… done (Zeit: 0,007s)> Index löschen user_recovery… erledigt (Zeit: 0,008s)> Spalte Confirmation_Token aus Tabelle % user löschen ... fertig (Zeit: 0,009s)> Spalte speichere_bestätigung_sent_at aus Tabelle % user löschen ... erledigt (Zeit: 0,009s)> Spalte Wiederherstellungs_Token aus Tabelle % user löschen ... erledigt (Zeit: 0,007s)> Spalte Wiederherstellungs_sent_at löschen aus Tabelle % user ... erledigt (Zeit: 0,008 s)> Spalte log_in_from aus Tabelle % user löschen ... erledigt (Zeit: 0,007 s)> Spalte log_in_at aus Tabelle % user löschen ... fertig (Zeit: 0,008s)> Umbenennen der Spalte "register_from" in Tabelle % user in registration_ip ... done (Uhrzeit: 0,009 s)> Hinzufügen von Spaltenflags mit der Ganzzahl NOT NULL DEFAULT 0 für Tabelle % user ... done (Zeit: 0.010s)> Umbenennen von Spalteneigenschaften in Tabelle % account in data… done (Zeit: 0,008s) *** angewendet m140504_113157_update_tables (Zeit: 0,090s) *** Anwendung von m140504_130429_create_token_table> c reate Tabelle % token ... done (Zeit: 0,006 s)> eindeutigen Index token_unique für % token erstellen (Benutzer-ID, Code, Typ) ... done (Zeit: 0,010 s)> Fremdschlüssel hinzufügen fk_user_token: % token (user_id) referenziert % user (id)… done (Zeit: 0,009 Sekunden) *** angewendet m140504_130429_create_token_table (Zeit: 0,026 Sekunden) *** Anwendung von m140830_171933_fix_ip_field> Alter Spalte registration_ip in Tabelle % user zu bigint… done (Zeit: 0.010s) *** m140830_171933_fix_ip_field (Zeit: 0.011s) *** angewendet *** m140830_172703_change_account_table_name> umbenennen> Tabelle account umbenennen (time) : 0.001s) *** angewendet m140830_172703_change_account_table_name (Zeit: 0,002s) Erfolgreich migriert.
Als Nächstes müssen wir Yii anweisen, die Yii2-User-Komponente zu verwenden. In /config/web.php ersetzen wir die Standardbenutzerkomponente…
'user' => ['identityClass' => 'app \ models \ User', 'enableAutoLogin' => true,],
… Mit der Yii2-User-Komponente:
'user' => ['class' => 'dektrium \ user \ Module', 'enableUnconfirmedLogin' => true, 'confirmWithin' => 21600, 'cost' => 12, 'admins' => ['admin'] ],
Da Yii2-User E-Mails zum Versenden von Registrierungsbestätigungen und vergessenen Passwörtern verwendet, ist es an der Zeit, unsere SwiftMailer-Konfiguration zu aktivieren. Ersetzen Sie in config / web.php die Standard-Mailer-Konfiguration hier…
'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', // alle Mails standardmäßig in eine Datei senden. Sie müssen // 'useFileTransport' auf "false" setzen und einen Transport für den Mailer konfigurieren, damit er echte E-Mails senden kann. 'useFileTransport' => true,],
… Damit müssen Sie Ihre eigenen SMTP-Anmeldeinformationen angeben:
'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=>' Ihre Host-Domain zB smtp.gmail.com ',' username '=>' your-email-or-username ',' password '=>' your-password ',' port '=>' 587 ',' Verschlüsselung '=>' tls ' ,],],
Jetzt müssen wir unsere Navigationsleiste mit den Yii2-User-Controller-Pfaden verknüpfen. In /views/layouts/main.php aktualisieren wir die Definition der Navigationsleistenarrays für das Bootstrap-Menü. Ersetzen Sie die aktuelle Navigationsleiste…
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' => 'Contact', 'url' => ['/ site / contact']], Yii :: $ app-> user-> isGuest? ['label' => 'Login', 'url' => ['/ site / login']]: ['label' => 'Logout ('. Yii :: $ app-> user-> identity-> Benutzername. ')' , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'post']],],]);
… Mit folgender Arraydefinition:
$ navItems = [['label' => 'Home', 'url' => ['/ site / index']], ['label' => 'Status', 'url' => ['/ status / index ']], [' label '=>' About ',' url '=> [' / site / about ']], [' label '=>' Kontakt ',' url '=> [' / site / contact ']]]; if (Yii :: $ app-> user-> isGuest) array_push ($ navItems, ['label' => 'Anmelden', 'url' => ['/ user / login']]], ['label' => 'Anmelden', 'url' => ['/ user / register']])); else array_push ($ navItems, ['label' => 'Logout ('. Yii :: $ app-> user-> identity-> benutzername. ')', 'url' => ['/ site / logout' ], 'linkOptions' => ['data-method' => 'post']]); echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => $ navItems,]);
Laden Sie die Anwendung erneut und klicken Sie auf Anmelden Link in der Navigationsleiste. Sie sollten so etwas sehen:
Wenn Sie auf klicken Anmelden, Sie sehen die Bestätigungsmeldung. Dies sagt uns, dass eine E-Mail gesendet wurde, auf die wir klicken müssen, um unsere Registrierung zu bestätigen.
Sie erhalten eine E-Mail wie diese:
Klicken Sie auf den Link in der E-Mail. Daraufhin sehen Sie Folgendes:
Beachten Sie den Login-Status, der von Yii2 und der Yii2-User-Komponente beibehalten wird. Dieser wird in der Navigationsleiste oben angezeigt. Klicken Ausloggen und lass uns durch die gehen Einloggen Seite:
Yii2-User beinhaltet auch die Passwortwiederherstellung:
Genau so haben wir eine äußerst wichtige Kernauthentifizierungskomponente für unsere Anwendung.
Yii2-User verfügt auch über eine Reihe von Konfigurationsfunktionen, die Sie selbst weiter erkunden können, z. Authentifizierung durch Dritte. Wir werden wahrscheinlich in einem späteren Tutorial zu ihnen zurückkehren.
Ich hoffe, Sie fanden das nützlich für Ihre eigene Yii2-Webanwendung. Wenn Sie wissen möchten, wann das nächste Yii2-Tutorial ankommt, folgen Sie mir @reifman auf Twitter oder besuchen Sie meine Instructor-Seite. Meine Ausbilderseite enthält alle Artikel dieser Serie, sobald sie veröffentlicht sind.