Laravel Socialite + Выполнение вызовов API после входа в систему

Пакеты Laravel 5, Socialite и google/apiclient.

Исходный код: https://github.com/svpernova09/meatings

У меня есть человек, который отлично работает с Google для входа в систему.

Я пытаюсь сделать вызов API другим методом для извлечения событий календаря как зарегистрированного пользователя. Я зацикливаюсь на том, что использовать токены.

Ошибка, которую я получаю:

"error": "invalid_grant",

"error_description": "Код уже был выкуплен".

Мой метод:

public function show($user_id)
{
    $user = $this->user->find($user_id);

    $client = new Google_Client();
    $client->setClientId(env('GOOGLE_CLIENT_ID'));
    $client->setClientSecret(env('GOOGLE_CLIENT_SECRET'));
    $client->setRedirectUri(env('GOOGLE_CALLBACK_URL'));

    $client->authenticate($user->code);
    $service = new Google_Service_Calendar($client);

    $calendarId = $user->calendar_id;
    $optParams = array(
        'maxResults' => 5,
        'orderBy' => 'startTime',
        'singleEvents' => TRUE,
        'timeMin' => date('c'),
    );
    $results = $service->events->listEvents($calendarId, $optParams);
    $events = [];
    if (count($results->getItems()) > 0) {
        foreach ( $results->getItems() as $event ) {
            $events[] = $event;
        }
    }

    return view('users.calendar')->with('events', $events);
}

Выход Laravel:

Ошибка Google_Auth_Exception в строке OAuth2.php 127: Ошибка получения маркера доступа OAuth2, сообщение: 'invalid_grant'

$user-code выглядит так: 4/hfPzDrOHyaEv3asdfadsfasdfDw72nXIl0rt2boUpGj7hM.Um5wPgCeasdfasdfafd1t6qxkmwI

Любое руководство будет замечательным. Я не получаю нигде с руководствами Google.

Ответ 1

Календарь использует различную область действия, чем социальный вход. Вы должны снова попросить разрешения. Вы можете проверить документацию API календаря и попробовать его на Google Playground.

Также Google возвращает "Код уже был выкуплен". потому что у вас уже есть токен доступа для общедоступной информации пользователя с вашим кодом.