Laravel Socialite: Legacy People API не использовался в проекте

Я использовал Laravel 5.4 с Socialite 3.0 для входа в социальную сеть в своем веб-приложении. Но теперь я получил ошибку 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,
    ]);
}

person Vineet Chauhan    schedule 05.11.2019    source источник
comment
Хорошо? У вас возникла проблема или возникла ошибка?   -  person Akash Gadhiya    schedule 05.11.2019
comment
Да, я столкнулся с этим, но теперь решил.   -  person Vineet Chauhan    schedule 05.11.2019
comment
Привет! У меня такая же ошибка (Legacy People API не использовался в проекте) с начала недели ... Несколько месяцев все работало исправно. Вы нашли решение проблемы? На данный момент мне пришлось создать новый проект, чтобы исправить это: |   -  person Axel186    schedule 05.11.2019
comment
@ Axel186 Просто выполните описанные выше шаги, и проблема также будет исправлена ​​в вашем существующем проекте. Если проблема не устранена, напишите здесь сообщение.   -  person Vineet Chauhan    schedule 06.11.2019
comment
@VineetChauhan, дайте мне знать, какие шаги нужно предпринять для решения этой проблемы?   -  person Mohit chauhan    schedule 06.11.2019
comment
Обновите пакет Socialite до 3.3.0   -  person Empty Brain    schedule 31.08.2020


Ответы (3)


Это решение действительно работает. Исправлена ​​моя проблема.

Большое спасибо.

Вот весь файл, если у кого-то есть эта проблема. Просто измените класс 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,
    ]);

}

}

person Amir Khalil    schedule 05.11.2019
comment
спасибо, братан, у меня работает .. googleapis.com/plus/v1/people/me? URL с googleapis.com/oauth2/v3/userinfo? - person symi khan; 08.01.2020
comment
Обновите пакет Socialite до 3.3.0 - person Empty Brain; 31.08.2020

Заменять

https://www.googleapis.com/plus/v1/people/me? URL с https://www.googleapis.com/oauth2/v3/userinfo?

Google обновил конечную точку API и рекомендует использовать эту https://www.googleapis.com/oauth2/v3/userinfo? конечную точку для получения сведений о пользователе.

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

person symi khan    schedule 08.01.2020
comment
Обновите пакет Socialite до 3.3.0 - person Empty Brain; 31.08.2020
comment
@EmptyBrain Это рабочий сервер. Я не хочу ничего менять, чтобы не было осложнений. На данный момент у меня все работает нормально. - person Amir Khalil; 26.11.2020

У меня также есть Laravel 5.4, и в моем случае это помогло обновить laravel/socialite с 3.0. * До 3.4.

Я установил этот параметр в composer: "laravel/socialite": "~3.0" и запустил composer update. Не забудьте очистить кеш: php artisan cache:clear

person Qraxin    schedule 05.01.2021