05 kwi 2012, 11:05 z Michiel

Uwierzytelnianie w google: OAuth2 powraca „invalid_grant”

Zacząłem konfigurować kalendarz google na mojej nowej aplikacji. Prawie wykonałem dokładną kopię kodu uwierzytelniającego wyświetlanego u deweloperów google (https://developers.google.com/google-apps/calendar/instantiate ), ale otrzymuję następujący błąd:

Błąd pobierania tokenu dostępu OAuth2, komunikat: „invalid_grant”

Obecnie używam Fork-CMS (http://www.fork-cms.com ), młody lekki CMS. Prawidłowo skonfigurowałem plik config.php klienta google-api-php. (identyfikator klienta, tajny klient, przekierowanie-uri, klucz programistyczny, ...), a uri przekierowania jest poprawnie ustawiony na konsoli Google api. Mój kod wygląda następująco:

<code><?php

/**
* This is a widget with a calendar implementation.
*
* @package       frontend
* @subpackage    events
*
* @author        Michiel Vlaminck <michielvlaminck@gmail.com>
*/
class FrontendEventsWidgetCalendar extends FrontendBaseWidget
{

    private $events = array();
    private $authUrl = array();

    /**
    * Execute the extra
    *
    * @return    void
    */
    public function execute()
    {      
        // call parent
        parent::execute();

        // load template
        $this->loadTemplate();

        // get data
        $this->getData();

        // parse
        $this->parse();
    }


    /**
    * Get the data from Google Calendar
    * This method is only executed if the template isn't cached
    *
    * @return    void
    */
    private function getData()
    {
        require_once PATH_LIBRARY . '/external/google-api-php-client/src/apiClient.php';
        require_once PATH_LIBRARY . '/external/google-api-php-client/src/contrib/apiCalendarService.php';

        $client = new apiClient();

        $service = new apiCalendarService($client);

        if (isset($_SESSION['oauth_access_token'])) {
            $client->setAccessToken($_SESSION['oauth_access_token']);
        } else {
            $token = $client->authenticate();
            $_SESSION['oauth_access_token'] = $token;
        }

        if ($client->getAccessToken()) {

            $calId = FrontendEventsModel::getCalendarId((int) $this->data['id']);
            $calId = $calId[0]['calendar_id'];

            $events = $service->events->listEvents($calId);
            $this->events = $events['items'];

            $_SESSION['oauth_access_token'] = $client->getAccessToken();

        } else {
            $this->authUrl = $client->createAuthUrl();
        }
    }


    /**
    * Parse
    *
    * @return    void
    */
    private function parse()
    {
        $this->tpl->assign('events', $this->events);
        $this->tpl->assign('authUrl', $this->authUrl);
    }
}

?>
</code>

Kiedy po raz pierwszy otwieram tę stronę widżetu, otrzymuję polecenie do Google, aby uwierzytelnić aplikację. Kiedy się zgadzam, zostaje przekierowany do mojej aplikacji i to jest punkt, w którym otrzymuję:

<code>apiAuthException » Main

Message Error fetching OAuth2 access token, message: 'invalid_grant'
File    C:\wamp\www\Officevibes\library/external\google-api-php-client\src\auth\apiOAuth2.php
Line    105
Date    Thu, 05 Apr 2012 08:34:47 +0000
URL http://localhost/calendar?code=4/YPUpFklKvhEeTcMm4moRth3x49oe
Referring URL   (Unknown)
Request Method  GET
User-agent  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19
</code>

questionAnswers (0)

10 lis 2014, 09:29 z Sebastiaan Hilbers
Przejdź do security.google.comOdwołaj dostępponownie odwiedź adres URL uwierzytelnieniaotrzymasz teraz nowy odświeżony znacznik
10 lip 2012, 16:04 z Zach M.

https://code.google.com/apis/console/ ) i odwołać Tajemnicę Klienta podIdentyfikator klienta dla zainstalowanych aplikacji.

Pamiętaj, aby zaktualizować swój kod za pomocą nowego Secret klienta

07 sty 2016, 22:04 z Matt

jeśli przez pomyłkę spróbujesz uwierzytelnić swójToken IDraczej niż twojeToken dostępu.

Więc nie bądź taki jak ja - upewnij się, że podałeś poprawny token do swojego kodu!

17 kwi 2012, 07:22 z janmoesen

danym uwierzytelnieniu. Dostanieszinvalid_grant błąd, jeśli poprzedni token jeszcze nie wygasł. Cache to gdzieś, aby móc go ponownie użyć.

27 wrz 2018, 09:35 z zomnombom

że jest to w zasadzie symbol zastępczy dla każdego błędu występującego w stosunku do tokena. znalazłemto artykuł naprawdę pomocny.

25 lis 2013, 16:45 z Sio

nij się, że zegar systemowy jest zsynchronizowany.

yourAnswerToTheQuestion