Подтвердить что ты не робот

Facebook OAuth: пользовательские параметры callback_uri

Я бы хотел иметь динамический URL-адрес перенаправления для моей интеграции с Facebook OAuth2. Например, если мой URL-адрес перенаправления указан в моем приложении Facebook:

http://www.mysite.com/oauth_callback?foo=bar

Я бы хотел, чтобы URL-адрес перенаправления для конкретного запроса был примерно таким, так что на сервере у меня есть некоторый контекст о том, как обрабатывать код аутентификации:

http://www.mysite.com/oauth_callback?foo=bar&user=6234

Моя перенаправка вызывается после отправки диалога авторизации, и я возвращаю код auth, но когда я пытаюсь получить токен доступа, я получаю ошибку OAuthException из Facebook. Мой запрос выглядит так (добавление строк для ясности):

https://graph.facebook.com/oauth/access_token
    ?client_id=MY_CLIENT_ID
    &redirect_uri=http%3A%2F%2Fwww.mysite.com%2Foauth_callback%3Ffoo%3Dbar%26user%3D6234
    &client_secret=MY_SECRET
    &code=RECEIVED_CODE

Все мои параметры кодируются по URL-адресу, и код выглядит действительным, поэтому я предполагаю, что параметр проблемы - это мой redirect_uri. Я попытался установить redirect_uri на все следующие, безрезультатно:

  • Фактический URL-адрес запроса на мой сайт
  • URL-адрес запроса на мой сайт, минус параметр code
  • URL-адрес, указанный в моей настройке приложения Facebook

Поддерживаются ли пользовательские параметры URI перенаправления? Если да, я правильно их определяю? Если нет, будет ли я вынужден установить файл cookie, или есть какой-то лучший шаблон для подачи контекста на мой веб-сайт?

4b9b3361

Ответ 1

Я понял ответ; вместо добавления дополнительных параметров к URL-адресу перенаправления, вы можете добавить параметр state к запросу https://www.facebook.com/dialog/oauth:

https://www.facebook.com/dialog/oauth
    ?client_id=MY_CLIENT_ID
    &scope=MY_SCOPE
    &redirect_uri=http%3A%2F%2Fwww.mysite.com%2Foauth_callback%3Ffoo%3Dbar
    &state=6234

Этот параметр состояния затем передается URL-адресу обратного вызова.

Ответ 2

Если по какой-либо причине вы не можете использовать опцию, предложенную Джейкобом в качестве моего аргумента, вы можете urlencode указать свой параметр redirect_uri перед тем, как передать его, и он будет работать даже с полный запрос, например foo=bar&morefoo=morebar.

Ответ 3

Я пытался внедрить рабочий процесс входа в Facebook с API v2.9 после этот учебник. Я попробовал решения, описанные выше. Ответ Мануэля вроде как правильный, но я заметил, что кодировка url не нужна. Кроме того, вы можете передать только один параметр. Будет рассмотрен только первый параметр запроса, остальные будут проигнорированы. Вот пример,

  • Запросить код через https://www.facebook.com/v2.9/dialog/oauth?client_id={app-id}&redirect_uri=http://{url}/login-redirect?myExtraParameter={some-value}

  • Вы получите обратный вызов для своего URL-адреса. Он будет выглядеть как http://{url}/login-redirect?code={code-from-facebook}&myExtraParameter={value-passed-in-step-1}. Обратите внимание, что facebook сделает обратный вызов с помощью myExtraParameter. Вы можете извлечь значение для myExtraParameter из URL-адреса обратного вызова.

  • Затем вы можете запросить токен доступа с помощью https://graph.facebook.com/v2.9/oauth/access_token?client_id={app-id}&client_secret={app-secret}&code={code-from-facebook}&redirect_uri=http://{url}/login-redirect?myExtraParameter={value-extracted-in-step-2}

Дополнительный параметр, переданный на шаге 1 после того, как первый параметр запроса будет проигнорирован. Также не забудьте указать какие-либо недопустимые символы в параметре запроса (подробнее см. .

Ответ 4

Лучше всего указать уникальный обратный вызов для каждого поставщика oAuth, /oauth/facebook, /oauth/twitter и т.д.

Если вы действительно хотите, чтобы один и тот же файл отвечал на все запросы oAuth, включите его в отдельные файлы или настройте путь, который будет вызывать тот же файл на вашем сервере, используя перенаправления .htaccess или что-то подобное: /oauth/* > oauth_callback.ext