2015-03-03 12 views
5

Sto utilizzando Yii2, GoogleOAuth e l'estensione yii2-utente. Desidero ricevere circoli google utente e impostare l'ambito per la mia configurazione:yii2, google outh2 e scope

'authClientCollection' => [ 
     'class' => 'yii\authclient\Collection', 
     'clients' => [ 
      'google' => [ 
       'class' => 'yii\authclient\clients\GoogleOAuth', 
       'clientId' => '758709912345-p4qp4lqihit5un1u6qb75msqp5m5j6d8.apps.googleusercontent.com', 
       'clientSecret' => 'ZygOIi1-0asfktUQ1pKOFOo', 
       'scope' => 'https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive', 
      ], 
     ], 
    ] 

quando faccio il login con Google OAuth2 ho avuto errore:

Exception – yii\authclient\InvalidResponseException Request failed with code: 400, message: { "error" : "redirect_uri_mismatch" }

Google risposta:

[ 
'url' => 'https://accounts.google.com/o/oauth2/token' 
'content_type' => 'application/json' 
'http_code' => 400 
'header_size' => 435 
'request_size' => 644 
'filetime' => -1 
'ssl_verify_result' => 0 
'redirect_count' => 0 
'total_time' => 0.115431 
'namelookup_time' => 0.001186 
'connect_time' => 0.025188 
'pretransfer_time' => 0.076275 
'size_upload' => 456 
'size_download' => 39 
'speed_download' => 337 
'speed_upload' => 3950 
'download_content_length' => -1 
'upload_content_length' => 456 
'starttransfer_time' => 0.114206 
'redirect_time' => 0 
'certinfo' => [] 
'primary_ip' => '2a00:1450:4010:c08::54' 
'primary_port' => 443 
'local_ip' => '2a03:6f00:1::5c35:726b' 
'local_port' => 33160 
'redirect_url' => '' 

]

Quando ho rimosso dalla configurazione ambito di Google+ (https://www.googleapis.com/auth/plus.login) autorizzazione go wi ° su errore e la risposta di Google è:

[ 
'url' => 'https://accounts.google.com/o/oauth2/token' 
'content_type' => 'application/json; charset=utf-8' 
'http_code' => 200 
'header_size' => 522 
'request_size' => 526 
'filetime' => -1 
'ssl_verify_result' => 0 
'redirect_count' => 0 
'total_time' => 0.13719 
'namelookup_time' => 0.001212 
'connect_time' => 0.026261 
'pretransfer_time' => 0.079765 
'size_upload' => 338 
'size_download' => 900 
'speed_download' => 6560 
'speed_upload' => 2463 
'download_content_length' => -1 
'upload_content_length' => 338 
'starttransfer_time' => 0.136241 
'redirect_time' => 0 
'certinfo' => [] 
'primary_ip' => '2a00:1450:4010:c08::54' 
'primary_port' => 443 
'local_ip' => '2a03:6f00:1::5c35:726b' 
'local_port' => 37583 
'redirect_url' => '' 

]

problema solo in https: //www.googleapis.com/auth/plus.login. Le mie API abilitate: http://minus.com/lJ5nw7caXJApD

+0

solo un non che 'https: // www.googleapis.com/auth/userinfo.email' sia deprecato. dovresti usare 'email' invece. vedi [docs] (https://developers.google.com/+/api/oauth) – Tahir

+0

Se metto solo https://www.googleapis.com/auth/plus.login in scope ho lo stesso errore "redirect_uri_mismatch ". – 1Pauletto

+0

sai che questo errore riguarda il 'REDIRECT URIS' che devi impostare nelle credenziali della tua app in google console, giusto? dovrebbe essere l'url della tua azione 'auth'. – Tahir

risposta

4

È anche possibile aggiungere returnUrl esplicitamente nella configurazione del client di autenticazione. Guarda docs per maggiori informazioni.

+0

Ho trovato questo tramite il metodo di prova ed errore \t. Nessun manuale sensato su questo. – Adobe

3

ero anche di fronte a questo problema e ha ottenuto la soluzione per cambiare il reindirizzamento URI in Credenziali progetto come di seguito:

Redirect URI

http://mysiteurl.com/user/sign-in/oauth?authclient=google 
http://mysiteurl.com/oauth2callback 

origini JavaScript

http://mysiteurl.com 
1
Use return URL in main.php like 

'authClientCollection' => [ 
      'class' => 'yii\authclient\Collection', 
      'clients' => [ 
      'facebook' => [ 
       'class' => 'yii\authclient\clients\Facebook', 
       'authUrl' => 'https://www.facebook.com/dialog/oauth?display=popup', 
       'clientId' => ['FacebookClientId'], 
       'clientSecret' => ['FacebookClientSecret'], 
       'attributeNames' => ['name','first_name','last_name','email','gender','picture','age_range'] 
      ], 
      'google' => [ 
       'class' => 'yii\authclient\clients\Google', 
       'clientId' => ['GoogleClientId'], 
       'clientSecret' => ['GoogleClientSecret'], 
       'returnUrl' => 'http://yoursite.com/site/auth?authclient=google' 
      ], 
      ], 
     ], 


Also set redirect_url in api credentials same as return url 

It's work for me.