подписано как запрос $ _GET не $ _POST - PullRequest
1 голос
/ 21 сентября 2011

Приложение, над которым я работаю, имеет правила перезаписи, чтобы пользователь всегда был на https. В моих настройках приложения fb я могу определить как защищенную, так и небезопасную страницу холста для использования https (поэтому перенаправление не произойдет), но я не могу сделать то же самое на вкладке приложения. Насколько я могу судить, FB использует любой протокол, на котором работает пользователь.

Из-за этого, когда пользователь обращается к приложению через http, mod_rewrite перенаправляет пользователя на версию https. Перенаправления не передают данные формы. Был поток, который я нашел, который обсуждал использование перенаправления прокси, но это, кажется, не работает.

Есть ли какой-нибудь параметр конфигурации, который я мог бы использовать, чтобы превратить мой подписанный запрос $ _POST в $ _GET? Или есть какой-нибудь вызов API, который я мог бы сделать, чтобы получить подписанный запрос? Facebook-> getSignedRequest () просто смотрит в $ _REQUEST, который из-за перенаправления не содержит данных поста.

Ответы [ 3 ]

0 голосов
/ 18 октября 2011

У меня такая же проблема здесь. Когда я захожу на вкладку с помощью HTTPS, я получаю подписанный подпись очень хорошо, потому что перенаправление не происходит.

Я запускаю другое приложение Facebook на том же сервере, и оно использует файл htaccess, чтобы убедиться, что файлы обслуживаются по HTTPS. Итак, в итоге я убедился, что папка, в которой я работаю, исключена из перезаписи. Вот так:

RewriteCond %{THE_REQUEST} !/my-app-folder

Затем в моем PHP я проверяю, является ли реферер HTTP. Если это не так, я изменяю заголовок на HTTPS-версию моего приложения. Вот так:

$referer = $_SERVER['HTTP_REFERER'];
if (substr($referer,0,5) != 'https') {
    header("Location: https://www.facebook.com/myapp?sk=app_xxxxxxxxxxxxxx");
}

Вероятно, это не доказательство, но как только я нажму на кнопку «Мне нравится», я определенно получу нужные результаты. Я также проверил это в страшном IE, и, похоже, он там тоже работает.

0 голосов
/ 03 декабря 2012

Некоторые браузеры автоматически перенаправляют ваш запрос на https, если вы были на этом конкретном сайте по https, поэтому, если вы находитесь в режиме http на Facebook, возникает ситуация:

Facebook запрашивает http версию вашего приложения, браузер перенаправляет этот запрос Facebook на https и данные POST, и таким образом signer_request исчезает в этом процессе ...

Я вижу эту проблему в Chrome 23, если вы удаляете данные для просмотра (в частности, «Деавторизация лицензий на контент»), приложение должно снова запуститься на http

0 голосов
/ 21 сентября 2011

Я бы сделал перенаправление в PHP (используя $_SERVER['HTTPS']), а не через .htaccess, и сделал бы это после первого сохранения данных подписанного запроса в сеансе пользователя.

...