2015-06-02 70 views
11

Laravel 5,Socialite和google/apiclient包。Laravel Socialite +登錄後進行API調用

的源代碼:https://github.com/svpernova09/meatings

我有社交名媛與谷歌工作的罰款,在登錄用戶

我試圖在不同的方法調用API來獲取日曆事件登錄的用戶。 。我陷入了使用什麼標記的地方。

我得到的錯誤是:

「錯誤」: 「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'

$用戶代碼如下所示:4/hfPzDrOHyaEv3asdfadsfasdfDw72nXIl0rt2boUpGj7h M.Um5wPgCeasdfasdfafd1t6qxkmwI

任何指導都會很棒。我沒有得到谷歌指南的任何地方。

+0

在這一點上,你不是已經認證?它說代碼已經被兌換了,並且你已經有一個訪問令牌。 –

+0

是的,用戶已經過身份驗證,我有Socialite取回的令牌,但當我嘗試驗證下一個API請求(此方法)時,我收到'無效授權'錯誤 – joepferguson

+4

@Joe嘗試通過撤銷訪問來刷新令牌並重新認證。您可能還必須使用不同的範圍。默認情況下,社交網站只使用一些範圍,我相信_profile_和_email_。您必須爲每個Google API文檔添加_calendar_或_calendar.readonly_作用域。 – brokekidweb

回答

1

日曆使用與社交登錄不同的範圍。你必須再次申請許可。您可以查看Calendar API的文檔並在Google Playground上試用。

另外谷歌返回「代碼已被贖回。」,因爲您已經擁有訪問令牌以用於您的代碼的用戶的公共信息。

相關問題