Laravel 社交名媛 : Legacy People API has not been used in project

标签 laravel google-signin laravel-socialite google-plus-signin

我在我的网络应用程序上使用了 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/

相关文章:

google-signin - 无法使用 Google Auth 登录,403 : org_internal

iOS 谷歌登录失败

android - 使用适用于 Android 的新 Google 登录获取封面照片网址

php - Laravel 名流 Facebook 登录错误 : The parameter app_id is required

laravel - 如何解决 Laravel 上的错误 "Trying to get property of non-object"

PHP Laravel Eloquent,foreach 破坏了我的关系

php - Laravel - 设置published_at属性

php - 使用 foreach 创建多维 StdClass 对象数组

laravel - OAuthException 使用 Socialite 与 facebook - "message": "An active access token must be used to query information about the current user.",

php - 动态 Laravel 社会名流配置