Laravel Socialite:Legacy People API未在项目中使用

我已将Laravel 5.4和socialite 3.0一起用于Web应用程序上的社交登录。但是如今,我遇到了一个错误 Legacy People API尚未在xxx项目中使用。然后,我对socialite软件包的核心文件进行了一些更改。 /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,]);
}
renqiu521 回答:Laravel Socialite:Legacy People API未在项目中使用

替换

https://www.googleapis.com/plus/v1/people/me?网址为 https://www.googleapis.com/oauth2/v3/userinfo?

Google已更新了API端点,建议使用此https://www.googleapis.com/oauth2/v3/userinfo?端点获取用户详细信息。

https://developers.google.com/people/legacy

,

此解决方案确实有效。解决了我的问题。

非常感谢。

如果有人遇到此问题,这里是整个文件。只需更改位于以下位置的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 5.4,就我而言,帮助将 laravel/socialite 从 3.0.* 升级到 3.4。

我在 composer: "laravel/socialite": "~3.0" 中设置了这个设置并运行了 composer update。 不要忘记清除缓存:php artisan cache:clear

本文链接:https://www.f2er.com/3161552.html

大家都在问