0

我在尝试将 Facebook 登录脚本实现到我的 Zend 网站时遇到问题。我在这里基本上做的是

  • 创建 My_Action_Helper_FBInitializer(扩展 Zend_Controller_Action_Helper_Abstract)。这将初始化 facebook 连接。

  • 在引导程序中调用 My_Action_Helper_FBInitializer (以便让我的所有控制器都可以使用它)

  • 将我的 Facebook 应用程序“站点 URL”设置为:http://localhost/test/public/(“站点域”字段留空)

  • 期望在我的 layout.phtml 中有一个有效的登录/注销按钮

ISSUE:问题是我从来没有提示过facebook身份验证窗口,每当我点击登录按钮时,我都会看到加载了同一个页面(我的localhost/test/public//index/index)和“facebook会话参数”附加到网址:

http://localhost/test/public/index/index/?session=%7B%22session_key ... [..]

这是我的文件:

我的动作助手 FBInitializer

class My_Action_Helper_FBInitializer extends Zend_Controller_Action_Helper_Abstract
{
public function init()
{
    $controller=$this->getActionController();
    $config=Zend_registry::get('config');
    $controller->config=$config;

    //initialize facebook
    require_once('Fb/facebook.php');

    $apiKey=$config->fb->apikey;
    $appId=$config->fb->appid;
    $secret=$config->fb->appid;

    $facebook = new Facebook(array('appId'  => $appId,'secret' => $secret,'cookie' => true));
    $controller->session = $facebook->getSession();       
    $controller->fbme = NULL; 
    $controller->facebook=$facebook;

    if (!empty($controller->session)) 
    {       
        $controller->uid = $facebook->getUser();         
        $controller->fbme = $facebook->api('/me'); 
    } 
    //  

}

}

我的索引控制器

class IndexController extends Zend_Controller_Action
{
public function indexAction()
{
    //login
    $this->view->fbme=$this->fbme;
    $this->view->fb=$this->facebook;
}
}

我的布局提取

[..]
if($this->fbme!==NULL)
{
echo"<img align='middle' src='https://graph.facebook.com/{$this->fbme['id']}/picture'/>"; 
echo "Welcome ".$this->fbme['name'].'! ';
$logoutUrl = $this->fb->getLogoutUrl(array('next'=>'/index/logout')); 
echo"<a href='{$logoutUrl}'>Logout</a>";

}
else
{

 echo $this->fbme;
 $loginUrl = $this->fb->getLoginUrl(array('req_perms' => 'email,read_stream,user_birthday,user_hometown,user_photos')); 
 echo "<a href='{$loginUrl}'>Login with Facebook!</a>";
}
[..]

我不知道我是否对 facebook 应用程序或 Zend 设置有误,但我正在测试一个类似的 100% WORKING 脚本(但没有 zend!),即:

$fbconfig['appid']  = "181****";     
$fbconfig['api']  = "5c69*****";     
$fbconfig['secret']  = "a2fc*****"; 

include_once "facebook.php";     

// Create our Application instance.     
$facebook = new Facebook(array('appId'  => $fbconfig['appid'],'secret' => $fbconfig['secret'],'cookie' => true));       

$session = $facebook->getSession();       
$fbme = null;     

// Session based graph API call.     
if (!empty($session)) 
{       

  $uid = $facebook->getUser();         
  $fbme = $facebook->api('/me');       
}      

// login or logout url will be needed depending on current user state. 
if ($fbme) 
{   
  echo"<img src='https://graph.facebook.com/{$fbme['id']}/picture'/>"; 
  echo $fbme['name'].' ';
  $logoutUrl = $facebook->getLogoutUrl(array('next'=>'http://localhost/fb/logout.php')); 
  echo"<a href='{$logoutUrl}'>logout</a>";
} 
else 
{   
  $loginUrl = $facebook->getLoginUrl(array('req_perms' => 'email,read_stream,user_birthday,user_hometown,user_photos')); 
  echo"<a href='{$loginUrl}'>login</a>";
}

谢谢

卢卡

4

0 回答 0