使用FB.login登录时,response.authResponse不包含带有id,admin,likes的页面属性。
但是,如果我们在PHP中加载页面,它确实将它包含在签名请求中(getSignedRequest)。
我认为使用javascript工作正常。
问题是,如果你开发一个主要的javascript应用程序,那么除非你使用服务器,否则你无法检测到该页面。使用javascript登录后需要刷新,以便服务器可以解析签名的请求。
有什么想法吗?
答案 0 :(得分:0)
使用javascript登录后需要刷新,以便服务器可以解析签名的请求。
不一定是“刷新” - AJAX请求也会这样做。
有什么想法吗?
如果在您的情况下往返服务器不可行,您也可以解析签名请求客户端 - 对于base64解码现代浏览器知道方法window.atob
,对于旧版浏览器,您可以获取脚本从网上做到。这只是解码已签名的请求,但实际上验证它。如果你还需要这样做,你必须使用服务器端approch,因为这需要你的应用程序保密。
答案 1 :(得分:0)
如果您想使用Javascript api获取已签名的请求,可以使用FB.getLoginStatus()
来检索signed_request。也就是说,如果用户登录到您的应用程序/网站。如果不是,您可以调用FB.login方法。我试过这种方法:
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({ appId: 'YOUR_APP_ID', //change the appId to your appId
status: true,
cookie: true,
xfbml: true,
oauth: true});
function updateButton(response) {
console.log(response);
if(response.status == 'connected'){
//alert('Yes Connected');
console.log(response.authResponse.signedRequest);
//This log can be seen through the firebug extention in console tab
}
else{
alert('Not Connected');
}
}
// run once with current status and whenever the status changes
FB.getLoginStatus(updateButton);
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol
+ '//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
答案 2 :(得分:0)
无法完成。 Facebook仅将页面选项卡信息作为签名请求获取变量的一部分发送到服务器。