CakePHP Facebook выход из системы интеграции с CakePHP-Facebook-плагин - PullRequest
1 голос
/ 04 февраля 2012

Я ищу способ с помощью CakePHP-Facebook-Plugin для входа пользователей из моего приложения, но не выхода из их собственного Facebook.

Если я позвоню своемуприложения выход из системы () независимо от того, что я делаю, я просто продолжаю входить через Facebook.Если я использую помощник плагинов facebook в представлении, чтобы сгенерировать кнопку выхода из системы ($ this-> Facebook-> logout ()), это определенно выводит пользователя из моего приложения ... но также выводит его из их собственного FacebookЭто довольно смешно.

Так как мне обойти это, чтобы вывести пользователей из моего приложения и оставить их в Facebook.

Ответы [ 4 ]

1 голос
/ 23 января 2013

Вы можете взглянуть на $ this-> Facebook-> disconnect ();

Это именно то, что вы хотите.

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

1 голос
/ 14 июня 2012

Я знаю, что это старый вопрос, но я понял его только сейчас, пытаясь понять то же самое.По сути, хотя в демонстрационных примерах с примерами 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": класс 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'))); ?>

И это должно быть во многом так.Я надеюсь, что это помогает кому-то, читающему это, кто все еще нуждается в помощи.

1 голос
/ 04 февраля 2012

Чтобы они "вышли из системы" из вашего приложения (имеется в виду, что в следующий раз, когда они попытаются использовать приложение, их попросят снова подтвердить подлинность вашего приложения), затем отправьте команду HTTP DELETE на me/permissions, используя ихтокен доступа пользователя.

0 голосов
/ 04 февраля 2012

Вы пытались убить сессию PHP?

 // this would destroy the session variables 
 session_destroy(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...