CakePHP facebook integration logout issue with CakePHP-Facebook-Plugin

前端 未结 4 655
再見小時候
再見小時候 2021-01-16 00:04

I\'m looking for a way with the CakePHP-Facebook-Plugin log users out of my app, but not log them out of their own facebook.

If I call my apps logout() function no m

相关标签:
4条回答
  • 2021-01-16 00:30

    To have them "logout" of your app (meaning the next time they try to use the app, they're going to be asked to authenticate your app again), then send an HTTP DELETE command to me/permissions using their user access token.

    0 讨论(0)
  • 2021-01-16 00:31

    I know this is an old question, but I figured this one out just now, trying to figure this same thing out. Basically, although in the demos with webtechnick's examples, he puts "Facebook.Connect" in the AppController, but, if you want the selective logout piece, the Best place to put it is within the actual controllers that you want to use it in or put it in AppController and pass noAuth=> true into it. Either way, whichever way you choose, you set up one controller (facebook_controller.php?) to handle the logins, and set its component with the noauth set to false (which is default). That way, you have total control over whether or not the user is logged back into the site, and you can ACTUALLY log them out (with the regular redirect($this->Auth->logout());

    Let me give you an idea:

    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());
            }
            }
    }
    

    your "facebook_controller.php": class FacebookaController extends AppController { ... // i dont personally like to have his piece create my user so: 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);  
        }
    }
    

    now your users/login.ctp file:

    <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'))); ?>
    

    And that should be pretty much it. I hope this helps someone reading this who still needs the help.

    0 讨论(0)
  • 2021-01-16 00:38

    You may want to take a look at $this->Facebook->disconnect();

    It does exactly what you want.

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

    0 讨论(0)
  • 2021-01-16 00:53

    Have you tried killing the PHP session?

     // this would destroy the session variables 
     session_destroy(); 
    
    0 讨论(0)
提交回复
热议问题