FacebookログインスクリプトをZendWebサイトに実装しようとして問題が発生しました。私がここで基本的にしていることは
My_Action_Helper_FBInitializerを作成します(Zend_Controller_Action_Helper_Abstractを拡張します)。これにより、Facebook接続が初期化されます。
ブートストラップでMy_Action_Helper_FBInitializerを呼び出します(すべてのコントローラーで使用できるようにするため)
Facebookアプリの「サイトURL」を次のように設定します:http:// localhost / test / public /(「サイトドメイン」フィールドは空白のまま)
私のlayout.phtmlにログイン/ログアウトボタンが機能することを期待しています
問題:問題は、Facebook認証ウィンドウが表示されないことです。[ログイン]ボタンをクリックすると、同じページ(localhost / test / public // index / index)に「facebookセッションパラメーター」が読み込まれます。 URLに追加:
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>";
}
ありがとう
ルカ