webtechnick Facebook注销无法正常工作

时间:2011-12-20 12:31:47

标签: cakephp facebook

我正在使用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。请帮帮我

2 个答案:

答案 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。到域,现在一切都是犹太人。

所以我认为诀窍是

  1. Facebook应用中没有应用域
  2. 通过.htaccess修复www的规范化
  3. 这可以确保将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。