So programmieren Sie mit Yii2 Google-Authentifizierung

Was Sie erstellen werden

Wenn Sie fragen: "Was ist Yii?" Auschecken Einführung in das Yii-Framework, Hier werden die Vorteile von Yii beschrieben und ein Überblick über Yii 2.0 gegeben.

In dieser Programmierserie mit Yii2 leite ich die Leser beim Einsatz des Yii2-Frameworks für PHP. In diesem Tutorial werde ich Sie durch die Integration des integrierten AuthClient unter Verwendung der Google-Konten-API und von OAuth 2.0 führen. 

Es kann für Sie hilfreich sein, sich mit Programmierung mit Yii2: Integration der Benutzerregistrierung, die die Integration der Yii2-User-Bibliothek für die Benutzerregistrierung und -authentifizierung durchläuft, und Programmierung mit Yii2: AuthClient-Integration mit Twitter, Google und anderen Netzwerken, die die Integration untersucht, durchzulesen mit Twitter-Authentifizierung und der nun veralteten Unterstützung für Googles OpenID. In diesem Lernprogramm erfahren Sie, wie Sie von unserer früheren Google OpenID-Integration zur OAuth 2.0-Integration mit der Google-Konten-API wechseln.

Für diese Beispiele bauen wir auf dem Rahmen für die Serie, unserer Hallo-Codebasis, auf. Verwenden Sie die GitHub-Links auf dieser Seite, um den Download für das Code-Repository zu erhalten.

Bevor wir anfangen, denken Sie daran, ich versuche, an den folgenden Diskussionen teilzunehmen. Wenn Sie eine Frage oder ein Thema haben, schreiben Sie bitte einen Kommentar oder kontaktieren Sie mich unter Twitter @reifman. Sie können mich auch direkt per E-Mail kontaktieren.

Wenn Sie bemerkt haben, dass in dieser Serie eine Verzögerung aufgetreten ist, liegt dies daran, dass ich kürzlich von einer Gehirnoperation zurückgekehrt bin. Vielen Dank für Ihre Geduld und Ihre Unterstützung. Es ist schön, regelmäßig wieder zu schreiben. Ich freue mich darauf, Yii2 weiter zu behandeln.

Yii2-Benutzer wird aktualisiert

Seit ich das letzte Mal über diese Themen geschrieben habe, hat sich Yii2 User stark verbessert. Als erstes müssen wir die Bibliothek aktualisieren. Sie können dies mit Composer in der Befehlszeile tun:

Komponist erfordert "dektrium / yii2-user: 0.9. * @ dev" 

Dadurch wird composer.json automatisch aktualisiert:

"Mindeststabilität": "Stable", "Requirement": "php": "> = 5.4.0", "yiisoft / yii2": "*", "yiisoft / yii2-bootstrap": "*", " yiisoft / yii2-swiftmailer ":" * "," dektrium / yii2-user ":" 0.9.*@dev "," stichoza / google-translate-php ":" ~ 2.0 "," yiidoc / yii2-redactor ": "2.0.0", "yiisoft / yii2-authclient": "*",,

Führen Sie anschließend die neuesten Datenbankmigrationen für Yii2 User aus. Dadurch wird Ihre Datenbank mit der neuesten Bibliothek auf den neuesten Stand gebracht:

php yii migrieren / up --migrationPath = @ vendor / dektrium / yii2-user / migrationen

Sie werden wahrscheinlich so etwas sehen:

yack migrieren / up --migrationPath =  Ändern Sie die Spalte registration_ip in Tabelle % user auf Zeichenfolge (45) ... done (Zeit: 0,009s) *** angewendetes m141222_110026_update_ip_field (Zeit: 0.030s) ) *** Anwenden von m141222_135246_alter_username_length> Ändern der Spalte Benutzername in Tabelle % user in Zeichenfolge (255)… done (Zeit: 0,010 s) *** angewendet m141222_135246_alter_username_length (Zeit: 0,012 s) *** Code-Zeichenfolge (32) für Tabelle % social_account ... done (Zeit: 0,008 s)> Spalte create_at integer zur Tabelle % social_account… hinzufügen ... (time: 0,009 s)> Spalten-E-Mail-String zur Tabelle hinzufügen % social_account ... done (Zeit: 0,008s)> Fügen Sie der Tabelle % social_account eine Spalte mit dem Benutzernamen-String hinzu ... ... (Time: 0,009s).> Erstellen Sie einen eindeutigen Index account_unique_code auf % social_account (Code)…. done (Zeit: 0.016s) *** angewendet m150614_103145_update_social_account_table (Zeit: 0,059s) *** Anwendung m150623_212711_fix_username_notnull> al ter Spalte Benutzername in Tabelle % user in Zeichenfolge (255) NOT NULL… done (Zeit: 0,009s) *** angewendet m150623_212711_fix_username_notnull (Zeit: 0.011s) Erfolgreich migriert.

Sie müssen auch die Komponentendefinition für yii2-user in die Module in \ hello \ config \ web.php verschieben:

'modules' => ['redactor' => 'yii \ redactor \ RedactorModule', 'class' => 'yii \ redactor \ RedactorModule', 'uploadDir' => '@ webroot / uploads', 'uploadUrl' => ' / hello / uploads ',' user '=> [' class '=>' dektrium \ user \ Module ',' enableUnconfirmedLogin '=> TRUE,' confirmWithin '=> 21600,' cost '=> 12,' admins '= > ['admin']],],

Registrieren Sie Ihr Google-Projekt

Damit sich Ihre Benutzer der Yii2 App registrieren und sich bei ihren Google-Konten anmelden können, müssen Sie ein Google-Projekt bei der Entwicklerkonsole registrieren:

Lasst uns Erstellen Sie ein Projekt genannt yii2hello:

Sie werden auf die Startseite des Projekts mit einer Reihe von Optionen im linken Seitenleistenmenü geleitet:

Es ist wichtig, den Zugriff auf die von Google verwendeten API-Gruppen anzufordern. Für Yii2 User müssen wir Google+ APIs aktivieren. Klicke auf APIs & Auth> APIs und suchen nach Google+:

Dann klick API aktivieren:

Sie sehen eine Liste der Aktivierte APIs das beinhaltet jetzt die Google+ API:

Als Nächstes müssen wir Anmeldeinformationen hinzufügen, damit wir unsere API-Anforderungen bei Google für die Aktivitäten dieses Projekts authentifizieren können. Klicken Referenzen:

Lass uns die verwenden OAuth 2.0-Client-ID Option oben. Sie werden dann aufgefordert, eine OAuth-Einwilligungsbildschirm und geben Sie Informationen zu Ihrer Anwendung ein, die Benutzern angezeigt wird, die sich registrieren oder sich bei Ihrer Anwendung anmelden möchten:

Auf der Referenzen Seite, wir wählen Internetanwendung, Da wir lokal testen, stellen wir zwei Einstellungen für Authentifizierungsrückrufe bereit. Ich verwende Port 8888 für meine lokale Entwicklung. So mein Autorisierte Ursprünge von JavaScript wird http: // localhost: 8888 sein und Yii2-Benutzer benötigt die Autorisierte Umleitungs-URIs Pfad von http: // localhost: 8888 / hello / user / security / auth? authclient = google.

Sie erhalten API-Schlüssel, die auch als a bezeichnet werden Kunden ID und Kundengeheimnis:

Ich beschreibe, wo ich diese Schlüssel platzieren kann.

AuthClient-Unterstützung konfigurieren

Beim Schützen Ihrer Schlüssel vor GitHub habe ich ausführlich beschrieben, wie ich eine Konfigurationsdatei verwende, um alle meine Schlüssel außer meinem GitHub-Repository zu speichern. Dann füge ich diese Datei am Anfang meiner Yii-Konfigurationsdateien ein. Dies hindert mich daran, versehentlich meine Schlüssel in meinem Repository einzuchecken und meine Konten zu gefährden. 

In meinem /var/secure/hello.ini In dieser Datei speichere ich alle Schlüssel für meine Anwendung. Platzieren Sie Ihre Google-API-Schlüssel auch hier:

oauth_google_clientId = "41xxxxxxxxxxxxxeusercontent.com" oauth_google_clientSecret = "LmxxxxxxxxxxxxxxxxxxxxxxFJ4" oauth_twitter_key = "rxkxxxxxxxxxxxxxxxxxopjU" oauth_twitter_secret = "b7gU4twxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkLy0z2e" smtp_host = "mailtrap.io" smtp_username = "2xxxxxxxxxxxxxxxxx2" Parameter smtp_password = "2xxxxxxxxxxxxxxxxx5" mysql_host = "localhost" mysql_un = "xxxxxxxxxxxx" mysql_db = "Hallo" mysql_pwd = "xxxxxxxxxxxx"

Verweise auf diese Schlüssel müssen wir in den AuthClient-Konfigurationseinstellungen in unserer Webkonfigurationsdatei in hinzufügen \ config \ web.php. Fügen Sie Array-Elemente für alle Drittanbieter-Services hinzu, die Sie unterstützen möchten:

 'basic', 'basePath' => dirname (__ DIR__), 'bootstrap' => ['log'], 'language' => 'de', // zurück zu englischen 'components' => ['view' => ['theme' => ['pathMap' => ['@dektrium / user / views' => '@ app / views / user'],],], 'authClientCollection' => ['class' => 'yii \ authclient \ Collection ',' clients '=> [' google '=> [' class '=>' dektrium \ user \ clients \ Google ',' clientId '=> $ config [' oauth_google_clientId '],' clientSecret '= > $ config ['oauth_google_clientSecret'],], 'twitter' => ['class' => 'yii \ authclient \ clients \ twitter', 'consumerKey' => $ config ['oauth_twitter_key'], 'consumerSecret' => $ config ['oauth_twitter_secret'],],],],

In Einführung in MailTrap: Ein gefälschter SMTP-Server zum Testen von Anwendungs-E-Mails vor der Produktion habe ich zu Testzwecken damit begonnen, die benutzerdefinierten SMTP-Einstellungen von MailTrap in meine Konfiguration von Yii SwiftMailer zu integrieren. Dies stellt sicher, dass wir die Registrierungs-E-Mails erhalten, wenn wir uns auf unserer lokalen Entwicklungsplattform anmelden.

Für dieses Tutorial habe ich festgestellt, dass ich die Portinformationen für SwiftMailer auf 2525 in aktualisieren musste \ config \ web.php:

'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=> $ config [' smtp_host '],' username '=> $ config [' smtp_username '],' password '=> $ config [' smtp_password '],' port '=>' 2525 ' , 'Verschlüsselung' => 'tls',],],

Mit Ihrem Google-Konto registrieren

Jetzt können wir endlich die Frontend-Benutzeroberfläche von Yii2 User erkunden. Beginnen wir mit der Registrierung. Klicke auf das Anmelden Option im Menü und Sie sehen dieses Formular:

Um sich bei allen, die wir heute erstellt haben, zu registrieren, klicken Sie auf das Google+ Symbol. Da ich nur bei einem Google-Konto angemeldet bin, wird ein transparentes Popup und eine Weiterleitung angezeigt, um meine Registrierung abzuschließen:

Sie sollten auf der Startseite in der oberen rechten Ecke sehen, dass Sie authentifiziert sind:

Mit Ihrem Google-Konto anmelden

Klicken Ausloggen und dann können wir uns mit dem Google+ Symbol anmelden. Klicken Einloggen im Kopfmenü:

Klicken Sie dann auf Google+-Symbol nochmal. Sie gelangen direkt zum Startbildschirm und zeigen an, dass Sie wieder angemeldet sind. Ziemlich cool, oder? Was aber, wenn Sie bei zwei Google-Konten angemeldet sind??

Wenn Sie Ihr Google-Konto für die Anmeldung auswählen, werden Sie im authentifizierten Modus zur Startseite zurückgeleitet.

Das Benutzerprofil und der Verbindungsbereich

Es ist zwar noch nicht in unserem Bootstrap-Header-Menü konfiguriert, wenn Sie es besuchen  http: // localhost: 8888 / hallo / benutzer / einstellungen / netzwerke, Die neue Verbindungsschnittstelle für Konten von Drittanbietern wird in Yii2 User angezeigt:

Sobald Sie angemeldet sind, können Ihre Benutzer von hier aus ihre sozialen Konten verbinden und trennen. Es gibt auch einen Account-Management- und Benutzerprofilbereich. Es ist ziemlich gut gemacht. 

Vielleicht möchten Sie einen Blick auf meine Erstellung Ihres PHP-Startups werfen, in der die erweiterte Vorlage von Yii2 mit Integration von Drittanbietern verwendet wird, derzeit ohne Yii2-Benutzer. Es gibt jetzt jedoch eine Anleitung zur Integration von Yii2 User mit der erweiterten Vorlage, sodass ich diese in Kürze aktualisieren kann.

Was kommt als nächstes?

Achten Sie auf kommende Tutorials in meiner Programmierreihe "Programmieren mit Yii2", während ich mich weiter mit verschiedenen Aspekten des Frameworks beschäftige. 

Ich freue mich über Feature- und Themenanfragen. Sie können sie in den Kommentaren unten posten oder mich auf meiner Lookahead Consulting-Website per E-Mail benachrichtigen.

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. 

  • Programmieren mit Yii2: Benutzerregistrierung integrieren (Tuts +)
  • Programmierung mit Yii2: AuthClient-Integration mit Twitter, Google und anderen Netzwerken (Tuts +)
  • Leitfaden zur AuthClient-Erweiterung für Yii 2
  • Yii2 OAuth2-Bibliotheksdokumentation
  • Yii2 Developer Exchange, meine Website für Yii2-Ressourcen