我正在尝试使用Facebook插件与CakePHP -一切似乎都很顺利-我可以使用喜欢/推荐按钮-我可以通过Facebook登录-它要求许可的事情,我告诉它…等
问题是,我的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),注销按钮只是弹出我到页面的顶部(即-空锚链接)
我目前正在调试同样的问题(加上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,可能是错误的,但似乎如果$选项被填充,例如重定向,但没有img参数,那么屏幕上就没有按钮出现(它转到'HERE')。通过更改上面的代码,我可以得到然后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();'));
}
}
"
链接应该以"#"的形式生成。注销函数用一个javascript onclick事件生成这个链接,该事件调用FB并注销用户。我会检查是否有javascript错误。您可以参考源代码进行确认。