diff --git a/src/Provider/Google.php b/src/Provider/Google.php index 5578f2b1..30f53923 100644 --- a/src/Provider/Google.php +++ b/src/Provider/Google.php @@ -9,8 +9,8 @@ class Google extends AbstractProvider public $scopeSeparator = ' '; public $scopes = [ - 'https://www.googleapis.com/auth/userinfo.profile', - 'https://www.googleapis.com/auth/userinfo.email', + 'profile', + 'email', ]; /** @@ -41,7 +41,10 @@ public function urlAccessToken() public function urlUserDetails(\League\OAuth2\Client\Token\AccessToken $token) { - return 'https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token='.$token; + return + 'https://www.googleapis.com/plus/v1/people/me?'. + 'fields=name(familyName%2CgivenName)%2CdisplayName%2C'. + 'emails%2Fvalue%2Cimage%2Furl&alt=json&access_token='.$token; } public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $token) @@ -50,14 +53,19 @@ public function userDetails($response, \League\OAuth2\Client\Token\AccessToken $ $user = new User(); - $imageUrl = (isset($response['picture'])) ? $response['picture'] : null; + $imageUrl = (isset($response['image']) && + $response['image']->url) ? $response['image']->url : null; + $email = + (isset($response['emails']) && + count($response['emails']) && + $response['emails'][0]->value)? $response['emails'][0]->value : null; $user->exchangeArray([ 'uid' => $response['id'], - 'name' => $response['name'], - 'firstname' => $response['given_name'], - 'lastName' => $response['family_name'], - 'email' => $response['email'], + 'name' => $response['displayName'], + 'firstname' => $response['name']->givenName, + 'lastName' => $response['name']->familyName, + 'email' => $email, 'imageUrl' => $imageUrl, ]); @@ -71,12 +79,14 @@ public function userUid($response, \League\OAuth2\Client\Token\AccessToken $toke public function userEmail($response, \League\OAuth2\Client\Token\AccessToken $token) { - return isset($response->email) && $response->email ? $response->email : null; + return ($response->emails && + count($response->emails) && + $response->emails[0]->value) ? $response->emails[0]->value : null; } public function userScreenName($response, \League\OAuth2\Client\Token\AccessToken $token) { - return [$response->given_name, $response->family_name]; + return [$response->name->givenName, $response->name->familyName]; } public function getAuthorizationUrl($options = array()) diff --git a/test/src/Provider/GoogleTest.php b/test/src/Provider/GoogleTest.php index bfb08102..235b4266 100644 --- a/test/src/Provider/GoogleTest.php +++ b/test/src/Provider/GoogleTest.php @@ -71,7 +71,7 @@ public function testGetAccessToken() public function testScopes() { - $this->assertEquals(['https://www.googleapis.com/auth/userinfo.profile', 'https://www.googleapis.com/auth/userinfo.email'], $this->provider->getScopes()); + $this->assertEquals(['profile', 'email'], $this->provider->getScopes()); } public function testUserData() @@ -80,7 +80,7 @@ public function testUserData() $postResponse->shouldReceive('getBody')->times(1)->andReturn('{"access_token": "mock_access_token", "expires": 3600, "refresh_token": "mock_refresh_token", "uid": 1}'); $getResponse = m::mock('Guzzle\Http\Message\Response'); - $getResponse->shouldReceive('getBody')->times(4)->andReturn('{"id": 12345, "name": "mock_name", "given_name": "mock_first_name", "family_name": "mock_last_name", "email": "mock_email"}'); + $getResponse->shouldReceive('getBody')->times(4)->andReturn('{"emails": [{"value": "mock_email"}],"id": "12345","displayName": "mock_name","name": {"familyName": "mock_last_name","givenName": "mock_first_name"},"image": {"url": "mock_image_url"}}'); $client = m::mock('Guzzle\Service\Client'); $client->shouldReceive('setBaseUrl')->times(5);