2015-06-02 24 views
11

Pakiety Laravel 5, Socialite i google/apiclient.Laravel Socialite + Wykonywanie połączeń API po zalogowaniu

kod źródłowy: https://github.com/svpernova09/meatings

mam towarzystwa działa dobrze z Google do logowania użytkowników w

Próbuję nawiązać połączenie API w innej metody, aby pobrać zdarzenia kalendarza jako zalogowany użytkownik. . Utknąłem z tym, jakich tokenów użyć, gdzie.

Błąd Dostaję jest:

"błąd": "invalid_grant"

"ERROR_DESCRIPTION": "kod został już wykorzystany."

Moja metoda:

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); 
} 

Wyjście laravel jest:

Google_Auth_Exception zgodne OAuth2.php 127: Błąd pobierania OAuth2 token dostępu, wiadomość: 'invalid_grant'

$ kod użytkownika wygląda następująco: 4/hfPzDrOHyaEv3asdfadsfasdfDw72nXIl0rt2boUpGj7h M.Um5wPgCeasdfasdfafd1t6qxkmwI

Wszelkie wskazówki będą świetne. Nigdzie nie docieram do przewodników google.

+0

W tym momencie nie jesteś już uwierzytelniony? Mówi, że kod został już wykorzystany i masz już token dostępu. –

+0

Tak, użytkownik jest już uwierzytelniony, mam token, który przywraca Socialite, ale dostaję błędy "nieprawidłowe udzielenie", gdy próbuję autoryzować następne żądanie API (ta metoda) – joepferguson

+4

@Joe Spróbuj odświeżyć token, odwołując dostęp i ponowne uwierzytelnianie. Możesz również użyć innego zakresu. Domyślnie program społecznościowy używa tylko kilku zakresów, uważam, że _profile_ i _email_. Musisz dodać zakresy _calendar_ lub _calendar.readonly_ do dokumentów Google API. – brokekidweb

Odpowiedz

1

Kalendarz używa innego zakresu niż logowanie społecznościowe. Musisz ponownie poprosić o pozwolenie. Możesz sprawdzić dokumentację Calendar API i wypróbować na Google Playground.

Również Google zwraca "Kod został już wykorzystany.", ponieważ masz już token dostępu do informacji publicznej użytkownika z kodem.

Powiązane problemy