Вот моя проблема. У меня есть ссылка 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, и я должен сказать, что документация абсолютно отстойная.
Если вы посмотрите на раскрывающийся список «Сведения о запросе» на странице с ошибкой, значение «redirect_uri» соответствует точно одному из приложений, настроенных redirect_uris? Символ для символа, включая протокол, порты, следующую косую черту и т. Д. – abraham
Я не получаю страницу с ошибкой Google с информацией о запросе. К этому моменту цикла Zend перехватил вызов и выбрал исключение Google как свое собственное - без деталей запроса. – sehummel
Но то, что в коде, это точно, символ для персонажа, что в консоле dev, чтобы ответить на ваш вопрос. Если что-то не переписывается, что я не знаю, как это видно, поскольку Zend находится в миксе к тому времени. – sehummel