Laravel Socialite +登录后进行API调用

joe*_*son 11 php oauth laravel

Laravel 5,Socialite和google/apiclient包.

源代码:https://github.com/svpernova09/meatings

我有社交网络与谷歌合作,用于登录用户.

我正在尝试使用不同的方法进行API调用,以便以登录用户的身份获取Calendar事件.我陷入了使用什么令牌的困境.

我得到的错误是:

"错误":"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);
}
Run Code Online (Sandbox Code Playgroud)

Laravel输出是:

OAuth2.php第127行中的Google_Auth_Exception:获取OAuth2访问令牌时出错,消息:'invalid_grant'

$ user-code看起来像:4/hfPzDrOHyaEv3asdfadsfasdfDw72nXIl0rt2boUpGj7hM.Um5wPgCeasdfasdfafd1t6qxkmwI

任何指导都会很棒.谷歌指南我没有到达任何地方.

小智 1

日历使用与社交登录不同的范围。您必须再次请求许可。您可以查看Calendar API的文档并在Google Playground上试用。

谷歌还返回“代码已被兑换”。因为您已经拥有一个访问令牌,可以使用您的代码获取用户的公共信息。