函数-getUser()中的Facebook身份验证返回0
我正在尝试在我的控制器中创建一个功能,将相册发布到Facebook。每次访问该函数时,我都会被重定向到重定向URI,就像$userid=0一样,即使我刚刚正确登录到Facebook。这是因为在登录后,它会重新启动该功能并创建一个新的Facebook会话,删除我刚刚获得的用户吗 谢谢你能提供的帮助函数-getUser()中的Facebook身份验证返回0,facebook,authentication,Facebook,Authentication,我正在尝试在我的控制器中创建一个功能,将相册发布到Facebook。每次访问该函数时,我都会被重定向到重定向URI,就像$userid=0一样,即使我刚刚正确登录到Facebook。这是因为在登录后,它会重新启动该功能并创建一个新的Facebook会话,删除我刚刚获得的用户吗 谢谢你能提供的帮助 function share($id){ if (!$id) { $this->Session->setFlash(__('Invalid id for Album
function share($id){
if (!$id) { $this->Session->setFlash(__('Invalid id for Album', true));
$this->redirect(array('action'=>'index')); }
$photos = $this->Album->find('all', array('conditions' => array('Album.id' => $id)));
$facebook = new Facebook(array('appId'=>'valid aphid', 'secret'=>'valid secret'));
$facebook->setFileUploadSupport(true);
$userid = $facebook->getUser();
if($userid) {
try {
$user_profile = $facebook->api('/me'); // Gets User's information based on permissions the user has granted to your application.
}
catch(FacebookApiException $e){
error_log($e);
// Print results if you want to debug.
$userid = null;
}
} else {
$login_url = $facebook->getLoginUrl($params = array('redirect_uri' => REDIRECT_URI,'scope' => PERMISSIONS_REQUIRED));
echo ("<script> top.location.href='".$login_url."'</script>");
}
//Create album
$results = $facebook->api('me/albums', 'post', $photos[0]['Album']['name']);//->photos_createAlbum($albumname, '', '', 'everyone', $this->_userid);
}
函数共享($id){
如果(!$id){$this->Session->setFlash(uuu('Invalid id for Album',true));
$this->redirect(数组('action'=>'index'));}
$photos=$this->Album->find('all',array('conditions'=>array('Album.id'=>$id));
$facebook=newfacebook(数组('appId'=>'validaphid','secret'=>'validsecret');
$facebook->setFileUploadSupport(true);
$userid=$facebook->getUser();
如果($userid){
试一试{
$user_profile=$facebook->api('/me');//根据用户授予应用程序的权限获取用户信息。
}
捕获(FacebookApiException$e){
错误日志($e);
//如果要调试,请打印结果。
$userid=null;
}
}否则{
$login\u url=$facebook->getLoginUrl($params=array('redirect\u uri'=>redirect\u uri,'scope'=>PERMISSIONS\u REQUIRED));
echo(“top.location.href=”。$login\u url。””;
}
//创建相册
$results=$facebook->api('me/albums','post',$photos[0]['Album']['name']);//->photos\u createAlbum($albumname','','''everybody',$this->\u userid);
}
默认情况下,Facebook类用于存储用户的身份验证状态。可以使用四个会话变量:
:Facebook用户idfb{appid}\u用户id
:需要交换访问令牌的授权代码fb{appid}\u code
:可用于进行API调用的访问令牌fb{appid}\u访问令牌
:CSRF令牌fb{appid}\u状态
- 默认情况下,cookie名称为PHPSESSID;您应该可以在浏览器中看到该设置
- 如果要跨多台服务器进行负载平衡,则需要一种解决方案,使您能够跨这些服务器共享会话状态
- 在开始会话之前,您不能输出任何文本(在实例化
对象时,如果需要,将自动完成)。您可能希望尝试将其作为函数的第一行:Facebook
if (!session_id()) { session_start(); }
$facebook = new Facebook(array(
'appId' => 'yourAppID',
'secret' => 'yourSecret',
));
$user = $facebook->getUser();
这将为您的用户设置适当的会话变量
这里还有一个关于Facebook的页面,解释了整个过程以及如何为访问令牌交换“代码”,如果您不使用他们的php类,(步骤6)我无法解释为什么它可以工作,但是当我遇到getUser()总是返回0的问题时,我在我的页面中包含了。然后它就起作用了。如果这也能解决你的问题,也许你可以试试。可能有点晚了,但我也有同样的问题 我的错误是回调url,它缺少php文件名:index.php 我只是在把它改成有效的后才给的 可能重复的