7
votes

I am using Yii2, GoogleOAuth and yii2-user extension. I want to receive user google circles and set scope to my config:

'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',
            ],
        ],
    ]

When I login with Google OAuth2 I had error:

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

Google response:

[
'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' => ''

]

When I removed from the configuration Google+ scope(https://www.googleapis.com/auth/plus.login) authorization go with out error and Google response is:

[
'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' => ''

]

Problem only in https: //www.googleapis.com/auth/plus.login . My enabled APIs: http://minus.com/lJ5nw7caXJApD

3
just a not that https://www.googleapis.com/auth/userinfo.email is deprecated. you should use email instead. see docsTahir
If I put only googleapis.com/auth/plus.login in scope I has the same error "redirect_uri_mismatch".1Pauletto
you know that this error is regarding the REDIRECT URIS that you need to set in your app credentials in google console, right? it should be the url to your auth action.Tahir
Yes, of course. I do that: i5.minus.com/jK6yYuDFN8dZr.png And on Google+ API: i5.minus.com/jJ5nw7caXJApD.png1Pauletto
There should be a parameter redirect_uriin url which I don't see. Normally it should be included automatically. Try to set 'returnUrl' property in your auth client configuration explicitly. see docs for more info.Tahir

3 Answers

5
votes

You can also add returnUrl explicitly in your auth client configuration. Look at docs for more info.

3
votes

I was also facing this problem and got solution to change the Redirect URI in project Credentials like below:

Redirect URIs

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

JavaScript origins

 http://mysiteurl.com
3
votes
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.