我有一个FaceBook应用程序。Facebook应用程序 - 使用JavaScript获取signed_request
有什么办法可以通过JavaScript获得signed_request吗?
使用PHP它看起来像这样:$_REQUEST['signed_request']
,但我不能使用PHP。
我有一个FaceBook应用程序。Facebook应用程序 - 使用JavaScript获取signed_request
有什么办法可以通过JavaScript获得signed_request吗?
使用PHP它看起来像这样:$_REQUEST['signed_request']
,但我不能使用PHP。
从FB JavaScript SDK中,您可以使用FB.getLoginStatus来检索signed_request。
这就是如果用户登录到您的应用程序/网站。
如果不是,您可以调用FB.login方法。
编号:http://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/
下面就来您的评论:
嗨,
我想你应该尝试登录到控制台的响应。
如果用户登录,response.status应该等于'connected'。它将始终返回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){ ... });
}
签名的请求是通过发送HTTP POST到设置为您的网址的URL 应用程序仪表板中的画布网址。
[按作者强调]
你不能直接访问通过JavaScript是POST数据:
POST数据应该是由服务器收到。作为结论,浏览器不授予访问该数据的权限,接受服务器渲染客户端代码中的数据。相关问题:How to read POST request parameters using JavaScript
现在为什么是这样?我猜原因是安全:想象一下,将POST请求中的密码发送到您的服务器和您的应用中使用的一些恶意JavaScript插件,尝试读取该数据并将其发送到它自己的恶意服务器。那根本不会很好。
在你的情况下,POST数据,包括signed_request
是由Facebook的通过HTTP POST发送到您的应用程序通过您的应用程序仪表板或通过重定向URL您用指定的画布URL请求您的应用程序的页面Registration plugin。您可以通过FB.getLoginStatus
访问它。先决条件是:您要么使用画布应用(您位于Facebook“内部”,有页面选项卡或画布应用)或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
使用来自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
快乐编码!
谢谢你的uoyr回答。我试图做的事:FB.getLoginStatus(功能(响应){ \t \t如果(response.authResponse){ \t \t警报( “OK”); \t \t}其他{ \t \t警报( “否”) ; \t \t} \t \t \t \t/*如果(response.status){ \t \t警报( “OK”); \t \t}其他{ \t \t alert(“NO”); ) \t \t} response.status返回YES,但response.authResponse返回NULL。这不是用户需要安装的应用程序 - 它只是在我的Facebook页面上显示,但我需要获得signed_request – user1067939