2011-11-28 51 views

回答

2

从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){ ... }); 
} 
+2

谢谢你的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

2

Facebook documentation

签名的请求是通过发送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

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 

快乐编码!

相关问题