【问题标题】:CakePHP / Facebook Plugin - Logout button linking to #CakePHP / Facebook 插件 - 链接到 # 的注销按钮
【发布时间】:2011-04-13 05:45:11
【问题描述】:

我正在尝试将 Facebook 插件与 CakePHP 一起使用 - 一切似乎进展顺利 - 我可以使用点赞/推荐按钮 - 我可以通过 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)登录,注销按钮只会将我弹出到页面顶部(即 - 空锚链接)

【问题讨论】:

  • 我也有同样的问题,但仅限于 Firefox (v3.6) 和 IE。铬运作良好。我还没有找到解决方案,但这对我有一点帮助:stackoverflow.com/questions/6563539/… Dave 你找到解决方案了吗?
  • 我没有 - 暂时关闭了 Facebook 登录 - 非常令人沮丧。

标签: php cakephp facebook cakephp-1.3


【解决方案1】:

我目前正在调试同样的问题(加上其他 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 参数,然后屏幕上不会出现任何按钮(它转到“这里”)。通过更改上面的代码,我可以显示 Facebook 链接并且 FB 注销工作。现在我正在调试一个身份验证问题,其中会话在注销后不断重新生成(没有 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();'));
    }
}

`

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我没有收到任何 javascript 错误 - 它生成的 onclick 是:onclick="FB.logout(function(response){ window.location = '/logout'}) ;"
    • 这是正确的javascript。尝试在干净的浏览器中执行整个身份验证和注销过程。
    • 仍然没有 - 没有 javascript 错误,它什么也不做。尝试了多台计算机,多个浏览器......等等。
    • 尝试手动构建链接并摆脱 onClick 参数,这就是我所做的:<a href='#' id='logout_link'>Logout</a><script>$("#logout_link").click(function(){FB.logout(function() { window.location = '/users/logout'; });});</script>
    • 您的代码做同样的事情 - 只是将浏览器撞到页面顶部。
    猜你喜欢
    • 2012-08-01
    • 1970-01-01
    • 2012-05-04
    • 2015-07-11
    • 2012-05-22
    • 2011-06-15
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多