我有一个FaceBook应用程序。
有没有办法用JavaScript获取signed_request?
使用PHP看起来像这样:$_REQUEST['signed_request']
,但我不能使用php。
答案 0 :(得分:2)
从FB JavaScript SDK中,您可以使用FB.getLoginStatus来检索signed_request。
即如果用户已登录您的应用/网站。
如果没有,你可以调用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){ ... });
}
答案 1 :(得分:2)
已签名的请求通过HTTP POST 发送到您设置的网址 App Dashboard中的 Canvas URL 。
[作者强调]
您无法通过JavaScript直接访问该POST数据:
POST 数据应该由服务器接收。作为结论,浏览器不授予对该数据的访问权,接受服务器呈现客户端代码中的数据。相关问题:How to read POST request parameters using JavaScript
现在为什么会这样?我想原因是安全性:想象一下,在POST请求中向您的服务器发送密码,并在您的应用程序中使用一些恶意JavaScript插件,试图读取该数据并将其发送到自己的恶意服务器。这根本就不好。
在您的情况下,包含signed_request
的POST数据会通过Facebook的HTTP POST发送到您的应用,通过您在应用信息中心指定的 Canvas URL 或通过您使用Registration plugin指定的重定向网址。您可以通过FB.getLoginStatus
访问它。先决条件是:您要么使用画布应用程序(您在“内部”Facebook,有页面选项卡或Canvas应用程序)或Registration Plugin。确保在您指定的URL上获取状态。相关问题:How do you post to an iframe?和getSignedRequest is null when not on a tab page
还尝试使用第二个参数设置为FB.getLoginStatus
来调用true
以强制往返于Facebook - 有效刷新响应对象的缓存并解决已登录(或超出)的用户的问题)Facebook自上次完整会话查询或已在其帐户设置中删除您的应用程序:
FB.getLoginStatus(function(response) {
// this will be called when the roundtrip to Facebook has completed
}, true);
同时查看此问题 - 它可能有所帮助: Facebook iframe tab signed request always empty
答案 2 :(得分:0)
使用来自facebook的javascript获取已签名的请求与$ _REQUEST [' signed_request']
上的值不同你可以做的是将$ _REQUEST [' signed_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
快乐的编码!!