是否可以强制Facebook会话刷新,或者在文档中多次调用'FB.init'函数。我不会详细谈论我想要实现的目标,因为它已经很长时间了,但是我已经研究了一段时间了,这似乎是必要的。
我有一个每隔30秒调用一次脚本来检查facebook用户是否已登录,这可以通过以下方式实现:
window.fbAsyncInit=function(){
// Initialize the Facebook object
FB.init({
appId:"123",
status:true,
cookie:true,
xfbml:true,
oauth:true
});
// Check the Facebook session status every 30 seconds
setTimeout(function(){
// Pass the Facebook object to the welcome function
fb_welcome(FB);
,30000);
};
在'fbWelcome'功能中,我测试用户是否使用getLoginStatus
功能通过Facebook登录。根据响应,我然后更改页面上的元素。但是,我做的一件事就是让所有这些都出错。
如果用户登录Facebook,我会使用ajax向我的API发送请求,该请求会返回Facebook用户详细信息。此API使用PHP与Facebook API进行通信。如果用户在加载页面时登录到Facebook,则不会出现问题。但是,如果用户没有登录Facebook,并且在我的网站上的另一个选项卡上登录Facebook,则会话不会刷新,并且由于访问令牌和签名请求无效,因此无法访问详细信息。因此,我需要一种方法来使用javascript刷新会话中的访问令牌和签名请求,以确保PHP API正确读取它们。
我很确定通过再次调用FB.init函数,这将解决它,因为它将刷新会话。但是,我不确定我是否打算每页多次调用此函数。这是允许的吗?是否会弄乱一切?
只是几点说明:
任何帮助非常感谢
答案 0 :(得分:0)
虽然我没有回答我的问题,但我已经使用了一个我不想使用的解决方案来解决它。我现在正在使用Javascript API而不是我自己的API检索用户详细信息,因为我无法将新的Facebook会话传递给PHP API。
我试图再次调用init函数,虽然我能够,它完全没有效果,而且我真的不希望它成为解决方案,因为我不应该重新初始化Facebook库只是为了刷新会议。
无论如何,如果他们有任何意见,我会保留其他人发表意见。似乎尝试在PHP和Javascript SDK之间进行通信在某些情况下是一个真正的挑战,我遇到的问题数量......
答案 1 :(得分:0)
也许我不理解你想要做什么。但是如果你想验证服务器端的facebook会话,只需抓住facebook cookie并执行你的auth服务器端来获取access_token。将access_token存储在会话中,然后在每次用户访问api时进行验证。只要用户登录到facebook,facebook cookie就可以使用,您只需要验证access_token是否有效。如果没有,请检索新令牌。如果cookie和令牌都无效,则将用户重定向到init。