Slik programmerer du med Yii2 Google-godkjenning

Hva du skal skape

Hvis du spør, "Hva er Yii?" Sjekk ut Introduksjon til Yii Framework, som vurderer fordelene med Yii og inneholder en oversikt over Yii 2.0.

I denne programmeringen med Yii2-serien, veileder jeg lesere i bruk av Yii2 Framework for PHP. I denne veiledningen vil jeg fortsette å veilede deg gjennom integrering av den innebygde AuthClient, ved hjelp av Google Accounts API og OAuth 2.0. 

Det kan være nyttig for deg å vurdere Programmering med Yii2: Integrerende brukerregistrering, som går gjennom integrering av Yii2-brukerbiblioteket for brukerregistrering og godkjenning, og Programmering med Yii2: AuthClient Integration With Twitter, Google og andre nettverk, som undersøker integrasjon med Twitter-autentisering og den nå utdaterte støtten til Googles OpenID. Denne opplæringen vil vise deg hvordan du kan flytte fra vår tidligere Google OpenID-integrasjon til OAuth 2.0-integrasjon med Google Accounts API.

For disse eksemplene fortsetter vi å bygge på rammen for serien, vår hei kodebase. Bruk GitHub-koblingene på denne siden for å få nedlastingen for kodelageret.

Før vi begynner, vær så snill og husk, jeg prøver å delta i diskusjonene nedenfor. Hvis du har et spørsmål eller et emneforslag, vennligst legg inn en kommentar nedenfor eller kontakt meg på Twitter @ reifman. Du kan også sende meg e-post direkte.

Hvis du la merke til at det har vært en forsinkelse i denne serien, er det fordi jeg nylig er tilbake fra hjernekirurgi. Takk for din tålmodighet og støtte, det er hyggelig å skrive igjen regelmessig, og jeg gleder meg til fortsatt dekning av Yii2.

Oppdaterer Yii2 Bruker

Siden jeg sist skrev om disse emnene, har Yii2 User forbedret mye. Det første vi må gjøre er å oppdatere biblioteket. Du kan gjøre dette med komponist på kommandolinjen:

komponist krever "dektrium / yii2-bruker: 0.9. * @ dev" 

Dette oppdateres automatisk composer.json:

"minimumstabilitet": "stabilt", "krever": "php": "> = 5.4.0", "yiisoft / yii2": "*", "yiisoft / yii2-bootstrap": "*" yiisoft / yii2-swiftmailer ":" * "," dektrium / yii2-bruker ":" 0.9.*@dev "," stichoza / google-translate-php ":" ~ 2.0 "," yiidoc / yii2-redaktor ": "2.0.0", "yiisoft / yii2-authclient": "*",,

Etterpå kjører du de nyeste databasemigreringer for Yii2 User-dette vil bringe databasen oppdatert med det nyeste biblioteket:

php yii migrere / opp -migrationPath = @ leverandør / dektrium / yii2-bruker / migreringer

Du ser sannsynligvis noe slikt ut:

$ php yii migrere / opp -migrationPath = @ leverandør / dektrium / yii2-bruker / migreringer Yii Migreringsverktøy (basert på Yii v2.0.6) Totalt 4 nye migrasjoner som skal brukes: m141222_110026_update_ip_field m141222_135246_alter_username_length m150614_103145_update_social_account_table m150623_212711_fix_username_notnull Bruk ovenstående migrasjoner? (ja | nei) nei: ja *** gjelder m141222_110026_update_ip_field> endre kolonne registration_ip i tabell % user til streng (45) ... ferdig (tid: 0.009s) *** anvendt m141222_110026_update_ip_field (tid: 0.030s ) *** m141222_135246_alter_username_length> endre kolonne brukernavn i tabell % user til streng (255) ... ferdig (tid: 0,010s) kode streng (32) til tabell social_account ... ferdig (tid: 0.008s)> legg til kolonne created_at heltall til tabell % social_account ... ferdig (tid: 0.009s)> % social_account ... ferdig (tid: 0.008s)> legg til kolonne brukernavn streng til tabell % social_account ... ferdig (tid: 0.009s)> opprett unik indeks account_unique_code på % social_account (kode) ... ferdig (tid: 0,016s) *** påført m150614_103145_update_social_account_table (tid: 0,059s) *** gjelder m150623_212711_fix_username_notnull> al ter kolonne brukernavn i tabellen % user til streng (255) IKKE NULL ... ferdig (tid: 0.009s) *** brukt m150623_212711_fix_username_notnull (tid: 0.011s) Migrert opp med hell.

Du må også flytte komponentdefinisjonen for yii2-brukeren til moduler i \ hello \ config \ web.php:

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

Registrer ditt Google-prosjekt

For at Yii2 app-brukerne skal registrere og logge inn med sine Google-kontoer, må du registrere et Google-prosjekt på utviklerkonsollen:

la oss Lag et prosjekt kalt yii2hello:

Du blir tatt til prosjektets hjemmeside med en rekke alternativer i venstre sidefelt-meny:

Det er viktig å be om tilgang til hvilke API-grupper med Google vi kan bruke. For Yii2-bruker må vi aktivere Google+ APIer. Klikk på APIer og auth> APIer og søk etter Google+:

Deretter klikker du Aktiver API:

Du får se en liste over Aktiverte APIer som nå inkluderer Google+ API:

Deretter må vi legge til legitimasjon, slik at vi kan godkjenne API-forespørsler med Google for dette prosjektets aktiviteter. Klikk legitimasjon:

La oss bruke OAuth 2.0 klient ID alternativet ovenfor. Deretter blir du bedt om å opprette en OAuth-samtykkeskjerm og fyll ut informasjon om søknaden din som vil bli presentert for brukere som prøver å registrere seg eller logge på med søknaden din:

På legitimasjon side, vi velger Webapplikasjon, og siden vi tester lokalt, gir vi to innstillinger for tilbakekalling av godkjenning. Jeg bruker port 8888 for min lokale utvikling. Så min Autorisert JavaScript-opprinnelse vil være http: // localhost: 8888 og Yii2 Brukeren krever Autoriserte omadresser URIer Sti til http: // localhost: 8888 / hei / bruker / sikkerhet / auth? authclient = google.

Du vil bli presentert med API-nøkler, også kjent som en klient-ID og klienthemmelighet:

Jeg vurderer hvor du skal plassere disse nøklene nedenfor.

Konfigurere AuthClient-støtten

Når jeg beskytter tastene dine fra GitHub, beskrev jeg i detalj hvordan jeg bruker en konfigurasjonsfil for å lagre alle mine nøkler bortsett fra GitHub-depotet mitt. Deretter inkluderer jeg denne filen i begynnelsen av min Yii konfigurasjonsfiler. Dette forhindrer meg ved et uhell å sjekke inn mine nøkler til mitt arkiv og ødelegge kontoene mine. 

I min /var/secure/hello.ini fil, lagrer jeg alle nøklene for søknaden min - legg inn Google API-nøklene inne her også:

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

Vi må legge til referanser til disse nøklene i AuthClient-konfigurasjonsinnstillingene i vår webkonfigurasjonsfil i \ Config \ web.php. Legg til elementelementer for alle tredjepartstjenestene du vil støtte:

 'basic', 'basePath' => dirname (__ DIR__), 'bootstrap' => ['logg'], 'language' => 'no', // tilbake til engelsk 'components' => ['view' => ['tema' => ['pathMap' => ['@ dektrium / bruker / visninger' => '@ app / visninger / bruker'],], 'authClientCollection' => ['class' => 'yii \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ > $ config ['oauth_google_clientSecret'],], 'twitter' => ['class' => 'yii \ authclient \ klienter \ Twitter', 'consumerKey' => $ config ['oauth_twitter_key'], 'consumerSecret' => $ config ['oauth_twitter_secret'],],],],

I introduksjon til MailTrap: En falsk SMTP-server for pre-produksjonstesting av applikasjons-e-post, begynte jeg å integrere MailTraps tilpassede SMTP-innstillinger i min Yii SwiftMailer-konfigurasjon for testformål. Dette sikrer at vi mottar registreringsemailene når vi registrerer oss på vår lokale utviklingsplattform.

For denne opplæringen fant jeg at jeg måtte oppdatere portinformasjon for SwiftMailer til 2525 i \ Config \ web.php:

'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=> $ config [' smtp_host '],' brukernavn '=> $ config [' smtp_username '],' passord '=> $ config [' smtp_password '],' port '=>' 2525 ' , 'kryptering' => 'tls',],],

Registrering med Google-kontoen din

Nå er vi endelig klar til å utforske Yii2 User's front-end-grensesnitt. La oss begynne med registrering. Klikk på Melde deg på alternativet i menyen, og du vil se dette skjemaet:

For å registrere deg med alt vi har laget i dag, klikker du på Google+-ikonet. Fordi jeg bare er logget inn på en Google-konto, vil det være en gjennomsiktig popup og viderekobling for å fullføre registreringen min:

Du bør se hjemmesiden som viser at du er autentisert i øvre høyre hjørne:

Logg på med Google-kontoen din

Klikk Logg ut og så kan vi prøve å logge inn med Google + -ikonet. Klikk Logg inn i topptekstmenyen:

Deretter klikker du på Google+ ikon en gang til. Du blir tatt rett til startskjermbildet som viser at du er logget på igjen. Ganske kul, va? Men hva om du er logget på to Google-kontoer?

Når du velger Google-kontoen din for å logge på, blir du tatt tilbake til hjemmesiden i autentisert modus.

Brukerprofilen og tilkoblingsområdet

Selv om den ikke er konfigurert på vår Bootstrap header meny, hvis du besøker  http: // localhost: 8888 / hallo / bruker / innstillinger / nettverk, Du ser det nye tilkoblingsgrensesnittet for tredjepartsregnskap i Yii2 Bruker:

Når du er logget på, kan brukerne koble til og koble fra deres sosiale kontoer herfra. Det er også et kontoadministrasjons- og brukerprofilområde. Det er ganske pent gjort. 

Du vil kanskje sjekke ut Bygg opp din oppstart med PHP-serien, som bruker Yii2s avanserte mal med tredjepartsintegrasjon, for tiden uten Yii2 User. Men det er nå en veiledning for å integrere Yii2-brukeren med den avanserte malen, så jeg kan oppdatere dette snart.

Hva blir det neste?

Se etter kommende opplæringsprogrammer i min programmering med Yii2-serien når jeg fortsetter å dykke inn i ulike aspekter av rammen. 

Jeg aksepterer funksjon og emneforespørsler. Du kan legge inn dem i kommentarene under eller sende meg en e-post på Lookahead Consulting.

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. 

  • Programmering med Yii2: Integrerer brukerregistrering (Tuts +)
  • Programmering med Yii2: AuthClient Integrasjon med Twitter, Google og andre nettverk (Tuts +)
  • Guide til AuthClient Extension for Yii 2
  • Yii2 OAuth2 Biblioteksdokumentasjon
  • Yii2 Developer Exchange, min Yii2 ressurs side