Приложение Facebook - получите подписанный запрос с JavaScript - PullRequest
6 голосов
/ 29 ноября 2011

У меня есть приложение FaceBook.

Есть ли способ получить подписанный запрос с помощью JavaScript?

С PHP это выглядит так: $_REQUEST['signed_request'], но я не могу использовать php.

Ответы [ 3 ]

2 голосов
/ 17 декабря 2013

Из документации Facebook :

Подписанный запрос отправляется через HTTP POST на URL-адрес, заданный в качестве вашего Canvas URL в панели инструментов приложения.

[выделено автором]

Вы не можете получить доступ к этим данным POST напрямую через JavaScript:

POST данные должны быть получены сервером . В заключение браузер не предоставляет доступ к этим данным, если сервер отображает данные в коде клиента. Смежный вопрос: Как читать параметры запроса POST с помощью JavaScript

Теперь, почему это так? Я предполагаю, что причина в security : представьте себе, что вы отправляете пароль на POST-запрос на ваш сервер и какой-то вредоносный плагин JavaScript, который вы используете в своем приложении, пытается прочитать эти данные и отправить их на свой собственный вредоносный сервер. Это было бы совсем нехорошо.

В вашем случае данные POST, включая signed_request, отправляются в ваше приложение через HTTP-запрос POST через Facebook с запросом страницы вашего приложения через Canvas URL , указанный вами на инструментальной панели приложения, или через * 1032. * URL перенаправления , указанный вами с помощью Плагин регистрации . Вы можете получить к нему доступ через FB.getLoginStatus. Предварительные условия: вы либо используете приложение canvas (вы «внутри» Facebook, у вас есть закладка страницы или приложение Canvas), либо плагин регистрации , Обязательно получите статус по указанному вами URL. Смежные вопросы: Как вы публикуете в iframe? и getSignedRequest имеет значение null, когда отсутствует на вкладке

Также попробуйте позвонить FB.getLoginStatus со вторым параметром, установленным на true, чтобы принудительно совершить обратную передачу в Facebook - эффективно обновить кэш объекта ответа и решить проблемы с пользователями, которые вошли в (или вышли) из Facebook, так как последний полный просмотр сеанса или удаление вашего приложения в настройках их аккаунта:

FB.getLoginStatus(function(response) {
  // this will be called when the roundtrip to Facebook has completed
}, true);

Также проверьте этот вопрос - это может помочь: Подписанный запрос на вкладку iframe в Facebook всегда пуст

2 голосов
/ 29 ноября 2011

Из FB JavaScript SDK вы можете использовать FB.getLoginStatus для получения подписанного запроса.

То есть, если пользователь вошел в ваше приложение / веб-сайт.

Если нет, то вы не можетевызовите метод FB.login.

Ссылка: http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

СЛЕДУЮЩИЙ ВАШ КОММЕНТАРИЙ:

Привет,

Я думаю, вам следует попробоватьзарегистрируйте ответ на вашей консоли.

response.status должен быть равен «подключен», если пользователь вошел в систему.Он всегда будет возвращать true, поскольку в этом параметре ответа будет возвращено значение.

Журнал будет выглядеть так:

{
    status: 'connected',
    authResponse: {
        accessToken: '...',
        expiresIn:'...',
        signedRequest:'...',
        userID:'...'
    }
}

Чтобы проверить, что возвращается, попробуйте следующее:

if(response.status == 'connected'){
   // user is logged and signed_request is accessible
   // with response.authResponse.signedRequest
}else{
   // user not logged in, request them to login
      FB.login(function(response){ ... });
}
0 голосов
/ 08 августа 2014

получение подписанного запроса с использованием javascript из Facebook отличается от значения в $ _REQUEST ['signature_request']

, что вы можете сделать, это сохранить $ _REQUEST ['signature_request'] в переменную javascript и передать еечерез ajax на php.

, например,

var signedRequest = <?php echo $_REQUEST['signed_request']  ?>

// затем вызовите запрос jsonp.

вы можете использовать мой сервис, если хотите.

КАК ИСПОЛЬЗОВАТЬ: просто сгенерируйте запрос jsonp к этому

https://websta.me/fbappservice/parseSignedRequest/<append signed request here>

, если в случае успеха он вернет что-то подобное

{
"algorithm": "HMAC-SHA256",
"issued_at": xxxxx,
"page": {
    "id": "xxxxxxx",
    "admin": true,
    "liked": false
},
"user": {
    "country": "jp",
    "locale": "en_US",
    "age": {
        "min": xx
    }
}

, если не получится, он выдаст:

Bad signed Json Signature

счастливое кодирование !!

...