0

Вот моя проблема. У меня есть ссылка Google Plus на странице с пользовательским изображением. URL-адрес:Как повторно проверить подлинность пользователя с помощью Google Oauth2

https://accounts.google.com/o/oauth2/auth?client_id= '. Zend_Registry :: get ('config') -> googlePlus-> client_id. '& redirect_uri =' . urlencode ($ strRedirectUrl). '& access_type = offline & response_type = code & scope ='. urlencode ('https://www.googleapis.com/auth/plus.login'). '&'. UrlEncode ('https://www.googleapis.com/auth/plus.me')

Идентификатор клиента и перенаправлять передаются в динамически. (Эта ссылка генерируется функцией PHP.)

Пользователь нажимает на ссылку и аутентифицируется с помощью Google. Теперь мне нужно записать их в свое приложение. Единственное, что, кажется, возвращается с сервера, - это код аутентификации. Я как-то должен иметь Google_Client, что я могу получить информацию о пользователе. Дело в том, что когда я создаю клиента для удовлетворения всех требований Google, у меня возникает проблема с тем, что я пытаюсь повторно использовать код. Я думаю, что я решил заняться этим.

Что происходит, однако, это получить redirect_uri_mismatch. Обширный Googling говорит, что это связано с тем, что URI не находится в моей консоли разработчика. Но это так. Я проверил четыре раза, и это точно так же. Никаких специальных портов или косых черт нет. Поэтому я не могу понять, почему я получаю эту ошибку.

Это потому, что я передал redirect_uri в приведенной выше ссылке, а затем укажите один из них ниже? Я заметил, что если я сделаю два redirect_uris одинаковыми, ошибка redirect_uri исчезнет, ​​но затем я получаю сообщение о том, что код уже был выкуплен. Думаю, потому, что он возвращался туда, где он был раньше. Я не могу, чтобы они были одинаковыми в любом случае, потому что мне нужны разные, чтобы направить браузер через мой код.

(Все значения Zend_Registry ниже, были подтверждены. Эта функция возвращает строку, необходимый ключ API.)

$client = new Google_Client(); 
$client->setApplicationName('Web Application'); 
$client->setClientId(Zend_Registry::get('config')->googlePlus->client_id); 
$client->setDeveloperKey(Zend_Registry::get('config')->googlePlus->serverKey); 
$client->setClientSecret(Zend_Registry::get('config')->googlePlus->secret); 
$client->setRedirectUri('http://test.XXX.com/login/social/network/google'); 
$client->setScopes(array('https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile')); 
$client->setAccessType('offline'); 
$client->setApprovalPrompt('force'); # this line is important when you revoke permission from your app, it will prompt google approval dialogue box forcefully to user to grand offline access 
$client->getRefreshToken(); 

$plus = new Google_Service_Oauth2($client); 

if (isset($_GET['code'])) { 
    $client->authenticate($_GET['code']); 
} 

if ($client->getAccessToken()) 
{ 
    $userinfo = $plus->userinfo; 
    die(print_r($userinfo->get())); 

} 

мне не нравится, как это структурировано, так как я уже аутентифицируется с помощью Google, когда пользователь заполнил свои учетные данные во всплывающем окне. Но я не вижу никакого способа обойти это. Я открыт для всех предложений. Это мой первый опыт работы с этим API, и я должен сказать, что документация абсолютно отстойная.

+0

Если вы посмотрите на раскрывающийся список «Сведения о запросе» на странице с ошибкой, значение «redirect_uri» соответствует точно одному из приложений, настроенных redirect_uris? Символ для символа, включая протокол, порты, следующую косую черту и т. Д. – abraham

+0

Я не получаю страницу с ошибкой Google с информацией о запросе. К этому моменту цикла Zend перехватил вызов и выбрал исключение Google как свое собственное - без деталей запроса. – sehummel

+0

Но то, что в коде, это точно, символ для персонажа, что в консоле dev, чтобы ответить на ваш вопрос. Если что-то не переписывается, что я не знаю, как это видно, поскольку Zend находится в миксе к тому времени. – sehummel

ответ

0

Области должны быть разделены пробелом. Вы добавили . '&'.

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

Если вы не знаете, вы можете обнаружить, что Oauthplayground весьма полезен при различных запросах. https://developers.google.com/oauthplayground/

+0

Это не моя проблема (пока). Я так и не добрался до этого, но хорошо знать и отличную информацию для других людей, поэтому я принял ваш ответ, хотя это напрямую не касалось моей проблемы. – sehummel

+0

Мы можем попытаться помочь отладки. Если это где-нибудь, где мы можем увидеть страницу (и ссылки)? Также вам нужна область plus.login? Вам нужны социальные функции Google+? Если нет, просто зайдите с помощью входа в Google, чтобы упростить пользовательский интерфейс https://developers.google.com/identity/ (см. Веб-сайт входа в Google). – nvnagr

Смежные вопросы