功能中的Facebook身份验证 - getUser()返回0

kyl*_*yle 5 authentication facebook

我正试图在我的控制器中创建一个功能,将专辑发布到Facebook.每次访问该函数时,我都被重定向到REDIRECT_URI,就像$ userid = 0一样,即使我刚刚正确登录Facebook.这是因为登录后,它会重新启动该功能并创建一个新的Facebook会话,消灭我刚刚获得的用户?

感谢您的任何帮助,您可以提供.

 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); 

        }
Run Code Online (Sandbox Code Playgroud)

PCh*_*ese 4

默认情况下,Facebook 类使用PHP 会话来存储用户的身份验证状态。可以使用四个会话变量:

  • fb_{appid}_user_id:Facebook 用户 ID
  • fb_{appid}_code:需要兑换访问令牌的授权码
  • fb_{appid}_access_token:可用于进行 API 调用的访问令牌
  • fb_{appid}_state:CSRF代币

检查您的 PHP 会话是否已配置且工作正常。

  • 默认情况下,cookie 名称为 PHPSESSID;您应该会在浏览器中看到该设置。
  • 如果您要在多个服务器之间进行负载平衡,您将需要一个允许您在这些服务器之间共享会话状态的解决方案。
  • 您无法在启动会话之前输出任何文本(如果需要,在实例化Facebook对象时自动完成)。您可能想尝试将其作为函数的第一行:

    if (!session_id()) { session_start(); }
    
    Run Code Online (Sandbox Code Playgroud)