10 ноября 2013 г.

Google Cloud Console и амперсанд в Redirect URI

Сегодня понадобилось внедрить компонент Social Login (SLogin) для Joomla на сайт. При попытке настроить OAuth с помощью Google столкнулся с неприятным фактом, что интерфейс Cloud Console переработали и мой обратный URI (Redirect URI) не сохранялся. Подробнее под катом.


Все руководства по получению Client Id и Client Secret от Google, которые я нашел имели в скриншотах подобную картинку интерфейса Cloud Console:



Однако, когда я залогинился в Google и зашел в Cloud Console передо мной предстал вот такой интерфейс:



Я, как вы видите успешно ввел все данные, получил значения Client Id и Client Secret, вставил их в соответствующий плагин Social Login. Но при попытке зайти на сайт, авторизовавшись через Google я получал такое сообщение:

Error:redirect_uri_mismatch
The redirect URI in the request: http://xxxxxxxxxx.ru/?option=com_slogin&task=check&plugin=google did not match a registered redirect URi

Судя по поиску у всех всё работало и проблем не возникало, а те, у кого возникали неправильно указали Redirect URI. Только на одном англоязычном форуме я наткнулся на обсуждение того, что в новой версии Google Cloud Console были проблемы, но их удалось обойти, выбрав старый интерфейс. Я же ссылку "Return to original console" (справа внизу) нашел только в процессе написания этой заметки :) Посчитал, что выбор старого интерфейса даже не предлагается. Перезагрузив интерфейс Console я увидел, что вместо полного обратного URI у меня стоит такой:

 http://xxxxxxxxxx.ru/?option=com_slogin

Довольно быстро до меня дошло, что в консоли баг - обрезается часть URL после перового знака амперсанда. Не буду перечислять как долго я пытался придумать обход проблемы (редирект, разные браузеры). К счастью, в итоге я вспомнил про такую штуку, как кодировка URL, быстро нашел как закодировать апмерсанд (тут) и заменил все знаки & в URL на %26 вот так:

http://xxxxxxxxxx.ru/?option=com_slogin%26task=check%26plugin=google

В таком виде Google принял URI без проблем и, обновив страницу, можно убедится, что он сохранился правильно.

После таких манипуляций авторизация через Google заработала. Остаётся надеяться, что баг пофиксят. Может быть этот способ будет кому-нибудь полезен. Желаю всем быть повнимательнее:)

1 комментарий:

  1. Спасибо за статью.
    Мне она помогла разобраться со своими проблемами.
    У меня было немного по другому, но суть та же.
    Когда я открыл Google API Access, то обнаружил не совсем то,что вводил:
    https://www.mysite/oauth2callback
    Я сделал как у Вас в статье:
    https://www.mysite/?option=com_slogin%26task=check%26plugin=google
    Не пошло.
    Потом вернул всё на место и убрал www:
    https://mysite/?option=com_slogin&task=check&plugin=google
    Не пошло.
    Потом внимательно перечитал инструкцию, удалил https. и сделал так:
    http://mysite/?option=com_slogin&task=check&plugin=google
    Заработало!!!
    Заодно заменил JavaScript origins:
    с https://www.mysite
    на http://mysite
    Я регистрировался два месяца назад, а настраивать взялся только сейчас.
    Рекомендация для пользователей:
    Через недельку после регистрации проверить что там Google дописал или удалил.

    P.S.
    Упомянул Ваш блог на joomlaforum.ru
    Неудобная отправка комментария.
    Нужно добавить Yandex и Mail.ru, или возможность
    вводить произвольный Email.

    ОтветитьУдалить