CakePHP / Facebook插件 - 链接到#的注销按钮

时间:2011-04-13 05:45:11

标签: php cakephp facebook cakephp-1.3

我正在尝试使用带有CakePHP的Facebook插件 - 一切似乎都很顺利 - 我可以使用喜欢/推荐按钮 - 我可以通过Facebook登录 - 它要求允许我告诉它的事情.. .etc

问题是,我的LOGOUT按钮只链接到您正在使用的任何页面以及#

所以 - 如果我在index.php上,注销按钮链接到index.php#

我在正确的位置包含正确的facebook html标记和init()。

有什么想法吗?

这是我的退出按钮代码:

if(!$session->check('Auth.User.id') && !$this->Connect->user('id')) {
    echo $this->Html->link('LOGIN', array('controller' => 'users', 'action' => 'login'));
} else {     
    echo $facebook->logout(array('redirect' => array('controller'=>'users', 'action'=>'logout'), 'label' => 'LOGOUT'));
}

修改

要清楚 - 我不在乎链接是否是#,但是注销按钮什么都不做,除了将浏览器推到顶部。它不会注销,也不会刷新页面。


EDIT2

如果我启动一个全新的浏览器,登录Facebook,然后转到我的网站,它会自动登录我 - 此时,注销按钮完美运行。但是 - 如果我通过我的网站上的用户登录(而不是FB)登录,则注销按钮会将我弹出到页面顶部(即 - 空锚链接)

2 个答案:

答案 0 :(得分:2)

我目前正在为同样的问题(另外还有1个)提供服务,我发现FacebookHelper.php似乎错误地处理了$ options:

if((isset($options['redirect']) && $options['redirect']) || $options['custom']){
            $options['redirect'] = Router::url($options['redirect']);
            $onclick = "logout('".$options['redirect']."');";
            if(isset($options['confirm'])){
                $onclick = 'if(confirm("'.$options['confirm'].'")){'.$onclick.'}';
            }
            if($options['img']){
                $source = '/Facebook/img/'.$options['img'];
                return $this->Html->image($source, array(
                'alt' => $options['alt'],
                'id' => $options['id'],
                'url' => '#',
                'onclick' => $onclick));
            }
            else {   /* HERE  */
                return $this->Html->link($options['label'], '#', array(
                    'onclick' => $onclick, 'id' => $options['id']));
            }
        } else {
            $source = '/Facebook/img/facebook-logout.png';
            return $this->Html->image($source, array(
                'alt' => 'Facebook logout',
                'url' => '#',
                'id' => $options['id'],
                'onclick' => 'logout();'));

我不是PHP的专家,可能是错的,但似乎如果填充了$ options,例如重定向,但没有img param,然后屏幕上没有按钮出现(它转到'HERE')。通过更改上面的代码,我可以获得显示的面部书籍链接,并且FB注销可以正常工作。现在我调试一个Auth prob,其中会话在注销后继续重新生成(没有FB连接)。

我的'固定代码',仍然是WIP和丑陋的:

if((isset($options['redirect']) && $options['redirect']) || $options['custom']){
                    debug($options);
        $onclick = "logout('".$options['redirect']."');";
        if(isset($options['confirm'])){
            $onclick = 'if(confirm("'.$options['confirm'].'")){'.$onclick.'}';
        }
        if($options['img']){
            $source = '/Facebook/img/'.$options['img'];
            return $this->Html->image($source, array(
            'alt' => $options['alt'],
            'id' => $options['id'],
            'url' => '#',
            'onclick' => $onclick));
        }
        else {
                        //Yes it gets here!
                        $source = '/Facebook/img/facebook-logout.png';
                        $redirect=$options['redirect'];
                        return $this->Html->image($source, array(
            'alt' => 'Facebook logout',
            //'url' => '#',
                            'url' => $redirect,
            'id' => $options['id'],
            'onclick' => "logout('$redirect');"));
        }
    } else {
        $source = '/Facebook/img/facebook-logout.png';
        return $this->Html->image($source, array(
            'alt' => 'Facebook logout',
            'url' => '#',
            'id' => $options['id'],
            'onclick' => 'logout();'));
    }
}

`

答案 1 :(得分:0)

链接应生成为“#”。注销功能使用javascript onclick事件生成此链接,该事件将调用FB并将用户注销。我会检查你是否收到了javascript错误。您引用source code for confirmation