我有用户授予的离线访问权限,并且会话的expires = 0,因此它永不过期。我已将所有会话值(如access_code等)存储在数据库中。存储值后,我可以立即阅读新闻源。 2秒后,当我尝试使用这些存储的会话值来读取用户的新闻源时,它无法正常工作。 OAuthException:必须使用有效访问令牌来查询有关当前用户的信息
在Php中,我使用这一行来阅读新闻源:$result=$facebook->api("/me/home?access_token=".$access_token);
奇怪的是,当我输入访问代码到浏览器的网址时,它正在运行:
https://graph.facebook.com/me/home?access_token= $的access_token。
请记住,当用户向您授予权限时,您会在网址中获得此权限:http://example.it/home/newsfeed.php?perms=<permissionlist>&selected_profiles=<uid>&installed=1&session={session_key:<session_key>,uid:<uid>,expires:0,secret:<secret>,access_token:<firstpart>|<secondpart>|<third part>,sig:<sig>}
我的许可列表是:
“friends_about_me,friends_education_history,friends_likes,friends_interests,friends_location,friends_religion_politics, friends_work_history,publish_stream,friends_activities,friends_events, friends_hometown,friends_location,user_interests,user_likes,user_events, user_about_me,user_status,user_work_history,read_requests,read_stream,offline_access,user_religion_politics,电子邮件,user_groups“;
当我在任何浏览器上面输入url时,它会给我uid的新闻提要,因为newsfeed.php有输出newsfeed的php代码。用户是否登录无关紧要。 IE甚至将json结果下载为文件
所以会话信息并没有真正过期,它正在运行。但不知何故,我不能让Facebook相信我有正确的凭据来阅读新闻源。
非常感谢任何帮助。请写下我如何重建会话值并让Facebook相信我。
我的最新解决方案可以在我更新的博客上找到:http://akcora.wordpress.com/
我也忘了提及,即使Feed不起作用,我仍然可以将状态消息发布到用户的个人资料中。这没有任何意义。我几乎可以肯定我在编码时犯了错误。例如,这是有效的状态发布代码:
$attachment = array(
'access_token' => $access_token,
'message' => 'Did a Test Post :',
'name' => "Offline posting using stored tokens",
'link' => "http:somelink.com",
'description' => "This post was made using a stored access token",
'picture'=>"some.jpg",
);
$ret_code=$facebook->api('/'.$target.'/feed', 'POST', $attachment);
但是获取Feed不起作用。对于发布而言,安全性应该比获取新闻源更严格,对吗?
答案 0 :(得分:0)
将access_token作为参数发布到api函数,而不是作为url中的get参数。
不要担心facebook库会为你做的工作......
$facebook->api("me/feed",array(
"access_token"=>$access_token
));
顺便说一下 - 新的OAuth身份验证方法中的会话参数不再可用。
会话已移至signed_request param(或服务器端的代码)