我在我的网络应用程序上使用了 Laravel 5.4 和 socialite 3.0 进行社交登录。但是现在我收到一个错误 项目 xxx 中未使用 Legacy People API .然后我对socialite package的一个核心文件做了一些修改。
/vendor/laravel/socialite/src/Two/GoogleProvider.php
第 61 行:替换 https://www.googleapis.com/plus/v1/people/me ?来自 https://www.googleapis.com/oauth2/v3/userinfo ?
并使用以下代码更新 mapUserToObject 函数:
protected function mapUserToObject(array $user)
{
$user['id'] = Arr::get($user, 'sub');
$user['verified_email'] = Arr::get($user, 'email_verified');
$user['link'] = Arr::get($user, 'profile');
return (new User)->setRaw($user)->map([
'id' => Arr::get($user, 'sub'),
'nickname' => Arr::get($user, 'nickname'),
'name' => Arr::get($user, 'name'),
'email' => Arr::get($user, 'email'),
'avatar' => $avatarUrl = Arr::get($user, 'picture'),
'avatar_original' => $avatarUrl,
]);
}
最佳答案
此解决方案确实有效。修复了我的问题。
非常感谢。
如果有人遇到这个问题,这里是整个文件。只需更改位于以下位置的 GoogleProvider 类:
./vendor/laravel/socialite/src/Two/GoogleProvider.php 与这个:
class GoogleProvider extends AbstractProvider implements ProviderInterface{
protected $scopeSeparator = ' ';
/**
* The scopes being requested.
*
* @var array
*/
protected $scopes = [
'openid',
'profile',
'email',
];
/**
* {@inheritdoc}
*/
protected function getAuthUrl($state)
{
return $this->buildAuthUrlFromBase('https://accounts.google.com/o/oauth2/auth', $state);
}
/**
* {@inheritdoc}
*/
protected function getTokenUrl()
{
return 'https://accounts.google.com/o/oauth2/token';
}
/**
* Get the POST fields for the token request.
*
* @param string $code
* @return array
*/
protected function getTokenFields($code)
{
return array_add(
parent::getTokenFields($code), 'grant_type', 'authorization_code'
);
}
/**
* {@inheritdoc}
*/
protected function getUserByToken($token)
{
//fixing legacy google+ api
$response = $this->getHttpClient()->get('https://www.googleapis.com/oauth2/v3/userinfo?', [
'query' => [
'prettyPrint' => 'false',
],
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$token,
],
]);
return json_decode($response->getBody(), true);
}
/**
* {@inheritdoc}
*/
protected function mapUserToObject(array $user)
{
//fixing legacy google+ api
$user['id'] = Arr::get($user, 'sub');
$user['verified_email'] = Arr::get($user, 'email_verified');
$user['link'] = Arr::get($user, 'profile');
$avatarUrl = Arr::get($user, 'image.url');
return (new User)->setRaw($user)->map([
'id' => Arr::get($user, 'sub'),
'nickname' => Arr::get($user, 'nickname'),
'name' => Arr::get($user, 'name'),
'email' => Arr::get($user, 'email'),
'avatar' => $avatarUrl = Arr::get($user, 'picture'),
'avatar_original' => $avatarUrl,
]);
}
}
关于Laravel 社交名媛 : Legacy People API has not been used in project,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58706390/