我在尝试将 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>";
}
谢谢
卢卡