与CakePHP-Facebook-Plugin的CakePHP facebook集成注销问题

时间:2012-02-04 01:45:10

标签: cakephp facebook

我正在寻找一种方法,将CakePHP-Facebook-Plugin日志用户从我的应用中删除,但不要将它们从自己的Facebook中注销。

如果我调用我的应用程序logout()函数,无论我做什么,我只是继续通过Facebook登录。如果我在视图中使用插件facebook帮助程序生成一个注销按钮($ this-> Facebook-> logout()),它肯定会将用户从我的应用程序中删除...但它也会将它们从他们的应用程序中记录下来自己的facebook有点荒谬。

那么我该如何解决这个问题,将用户从我的应用中注销,然后让他们登录到facebook。

4 个答案:

答案 0 :(得分:1)

要让他们“注销”您的应用(意味着下次他们尝试使用该应用时,他们会被要求再次验证您的应用),然后向me/permissions发送HTTP DELETE命令使用他们的用户访问令牌。

答案 1 :(得分:1)

我知道这是一个老问题,但我刚才想出这个问题,试图弄清楚这个问题。基本上,虽然在使用webtechnick的示例演示中,他将“Facebook.Connect”放在AppController中,但是,如果您想要选择性注销片段,最好放置它的位置在您想要使用它的实际控制器中或把它放在AppController中并将noAuth=> true传递给它。无论哪种方式,无论你选择哪种方式,你都设置一个控制器(facebook_controller.php?)来处理登录,并设置其组件,noauth设置为false(默认值)。这样,您可以完全控制用户是否已重新登录到站点,并且您可以实际将其注销(使用常规redirect($this->Auth->logout());

让我给你一个想法:

app_controller.php

class AppController extends Controller {
    var $components = array('Auth', 'Acl', 'Session');
       //or if you want access to "$this->Connect" universally:
       //   array('Auth', 'Facebook.Connect' => 
       //                      array('noauth'=>'true', 'Acl', 'Session');
}

users_controller.php中:

class UsersController extends AppController{
var $helpers = array('Facebook.Facebook');
        //an example of the users controller, enabling connect, but
        // not authorizing the user (because logout() used by Auth is here)
    var $components = array('Email', 'Session', 'Facebook.Connect' => array('createUser'=>false, 'noauth'=>true));

        //login() doesnt need to be shown and can be left alone

        function logout(){
              if ($this->Connect->FB->getUser() == 0){
                    $this->redirect($this->Auth->logout());
        }else{
                //ditch FB data for safety
                $this->Connect->FB->destroysession();
                //hope its all gone with this
        session_destroy();
                //logout and redirect to the screen that you usually do.
        $this->redirect($this->Auth->logout());
        }
        }
}

你的“facebook_controller.php”:     class FacebookaController扩展AppController {     ...     //我个人不喜欢让他的作品创造我的用户:     var $ components = array('Facebook.Connect'=> array('createUser'=> false));     ...

function login(){
//just need this stub function for later
$this->autoRender = false;
}

//you also need this for deauths or they will still be able to get into the site after deauth (against policy or whatever)
    function deauthorize(){
    //get user id from facebook API
    $uid = $this->Connect->FB->getUser();
    $record = $this->User->findByFacebookId($uid);
    $this->User->delete($record['id'], FALSE);  
    }
}

现在是您的users / login.ctp文件:

<script>
  window.fbAsyncInit = function() {
    FB.init({
      appId      : 'your app id', // App ID
      channelUrl : '//'+window.location.hostname+'/facebook/channel', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });

    // Additional initialization code here
    FB.Event.subscribe('auth.statusChange', function(response){
        if (response.status == "connected"){
            alert('redirecting you to auto facebook login');
                //here is out default place for login
            window.location.href = "http://"+window.location.hostname + "/facebook/login";
        }
    });
  };

  // Load the SDK Asynchronously
  (function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
   }(document));
</script>
<?php e($this->Facebook->login(array('registration-url'=>'http://www.yoursite.com/facebook/signup'))); ?>

这应该是它。我希望这可以帮助那些仍然需要帮助的人阅读。

答案 2 :(得分:1)

您可能需要查看$ this-&gt; Facebook-&gt; disconnect();

它完全符合您的要求。

http://projects.webtechnick.com/docs/facebook/default/FacebookHelper.html#disconnect

答案 3 :(得分:0)

您是否尝试过杀死PHP session?

 // this would destroy the session variables 
 session_destroy();