我正在使用webtechnick facebook插件,我已经完成了所有设置并且其FB登录功能完美无缺。
我正在使用$fbc =$this->Connect->User();
来获取登录用户的FB详细信息
并使用
<?php
echo $facebook->login(array('perms' => 'email,publish_stream','size'=>'small'));
?>
<?php
echo $this->Facebook->logout();
?>
分别用于登录,注销。我在登录后获取用户的详细信息,但在执行注销();
后不会取消设置我正在使用webtechnick fb插件版本3.1.1。请帮帮我
答案 0 :(得分:2)
我的帮助没有多大帮助,因为我还没有真正找到解决方案。好消息是你并不孤单:
https://github.com/webtechnick/CakePHP-Facebook-Plugin/issues/43
我可以告诉你的是,facebook cookie(fbsr_ {facebook_app_id})要么没有删除,要么正在重新创建,这就是问题的根源。
修改强> 的
我可能已经知道这里发生了什么。直到另一个晚上,我没有费心去设置我的.htaccess文件,http:/www.example.com和http:/example.com都有效。
在我的脸书应用中,我将example.com设置为域名,并将网站网址指向www.example.com。
使用fbsr_ {app id} cookie,我注意到它有时在http://example.com,而我的cakephp cookie在www上。
我在我的facebook应用程序中更改了URL(添加www,删除www),然后也开始在.htaccess中执行重写规则以添加或删除www。我刚从我的脸书应用程序中删除了appdomain,强制www。到域,现在一切都是犹太人。
所以我认为诀窍是
这可以确保将cakephp和facebook cookie保存到相同的域中,当您注销时,它们将从所述域中删除。
希望这是有道理的......
答案 1 :(得分:1)
我知道这篇文章的一些建议为时已晚。仍然觉得这可能有助于后来阅读这篇文章的人。
我也面临着插件的注销问题,我已经修改了插件中的ConnectComponent中的一个函数,以便在操作为“logout”时清除其会话详细信息。以下是修改后的功能:
private function __syncFacebookUser(){
if($this->Controller->params['action'] == 'logout')
{
$this->Controller->Session->delete('FB');
$this->uid = null;
$this->Controller->Session->delete('Auth.User');
}
else
{
if(!isset($this->Controller->Auth)){
return false;
}
$Auth = $this->Controller->Auth;
if (!$this->__initUserModel()) {
return false;
}
// if you don't have a facebook_id field in your user table, throw an error
if(!$this->User->hasField('facebook_id')){
$this->__error("Facebook.Connect handleFacebookUser Error. facebook_id not found in {$Auth->userModel} table.");
return false;
}
// check if the user already has an account
// User is logged in but doesn't have a
if($Auth->user('id')){
$this->hasAccount = true;
$this->User->id = $Auth->user($this->User->primaryKey);
if (!$this->User->field('facebook_id')) {
$this->User->saveField('facebook_id', $this->uid);
}
return true;
}
else {
// attempt to find the user by their facebook id
$this->authUser = $this->User->findByFacebookId($this->uid);
//if we have a user, set hasAccount
if(!empty($this->authUser)){
$this->hasAccount = true;
}
//create the user if we don't have one
elseif(empty($this->authUser) && $this->createUser) {
$this->authUser[$this->User->alias]['facebook_id'] = $this->uid;
$this->authUser[$this->User->alias][$this->modelFields['password']] = $Auth->password(FacebookInfo::randPass());
if($this->__runCallback('beforeFacebookSave')){
$this->hasAccount = ($this->User->save($this->authUser, array('validate' => false)));
}
else {
$this->authUser = null;
}
}
//Login user if we have one
if($this->authUser){
$this->__runCallback('beforeFacebookLogin', $this->authUser);
$Auth->authenticate = array(
'Form' => array(
'fields' => array('username' => 'facebook_id', 'password' => $this->modelFields['password'])
)
);
if($Auth->login($this->authUser[$this->model])){
$this->__runCallback('afterFacebookLogin');
}
}
return true;
}
}
}
对我来说,facebook插件适用于facebook connect。