Facebook Connect отключить автоматический вход - PullRequest
1 голос
/ 19 января 2011

Я интегрировал график api facebook connect, но если мы войдем в facebook, мы автоматически войдем на сайт и через facebook connect. Можно ли как-то разрешить пользователю нажимать на фб «Логин» только тогда, когда пользователь подключается к сайту со своей учетной записью фб?

Теперь пользователь автоматически входит на сайт без возможности выбора, будет ли он использовать свою учетную запись Facebook. Если они хотят выйти из сайта, им нужно полностью выйти из Facebook только тогда, они могут также выйти из сайта с помощью facebook connect.

Кто-нибудь может мне помочь или дать несколько советов, как поступить? Спасибо!

Ответы [ 4 ]

3 голосов
/ 27 марта 2011

У меня была такая же проблема на недавнем сайте, и я нашел способ ее преодолеть. Мое решение позволило пользователю уже войти в Facebook на своем компьютере, но не иметь автоматического входа на моем веб-сайте, тогда он может войти с помощью кнопки входа Facebook и, наконец, когда он выйдет, он не выйдет из Facebook на своем компьютере. , только на моем сайте (так же, как Digg делает с Facebook).

Для этого я использовал https://github.com/facebook/php-sdk/, чтобы проверить в PHP, существует ли активная сессия facebook с пользователем и веб-сайтом (что приведет к автоматическому входу в систему). Если бы был, я бы не повторил код авто логина:

  FB.init({ 
      appId   : '<?php echo $facebook->getAppId(); ?>',
      session : <?php echo json_encode($session); ?>, // don't refetch the session when PHP already has it
      status  : true, // check login status
      cookie  : true, // enable cookies to allow the server to access the session
      xfbml   : true // parse XFBML
    });     
    FB.Event.subscribe('auth.login', function() {
      window.location = "process-login.php";
    });

но вместо этого просто создайте мою собственную кнопку входа в Facebook, которая будет ссылаться на "process-login.php".

process-login.php установит пользовательскую переменную $ _SESSION, которая сообщает моему веб-сайту, что кто-то вошел в систему (будь то через мою собственную систему или через facebook), а затем перезагрузит ссылающуюся страницу (используя $ _SERVER ['HTTP_REFERER']) который теперь будет отображать пользователя, вошедшего в систему через Facebook, поскольку теперь была установлена ​​моя собственная переменная $ _SESSION. Чтобы выйти из них (без выхода из Facebook полностью, только с моего сайта), я просто загрузил бы скрипт выхода, который удалил переменную $ _SESSION.

example.php (в php-sdk на github) был очень полезен при поиске моего решения, хотя мне пришлось значительно его настроить, чтобы он работал с моей существующей системой. По крайней мере, это помогло мне увидеть, как получить доступ к переменной сеанса facebook в PHP (в примере хранится в $ me).

Надеюсь, это поможет вам, если это все еще проблема, или что это помогает кому-то еще в этой ситуации.

EDIT: Оказывается, у меня все еще были некоторые проблемы с автоматическим входом в систему в редких случаях. Чтобы исправить это, я удалил event.subscribe ('auth.login') и сделал кнопку facebook, которая вызывала следующую функцию, чтобы проверить состояние входа в систему, прежде чем подписываться даже на auth.login. Вот функция:

  function check_login_session(){
        FB.getLoginStatus(function(r){
            if(r.session){
                window.location = '/process-login.php';
            }
            else{
                FB.Event.subscribe('auth.login', function(response) {
                    window.location = '/process-login.php';
                });
                FB.login();
            }
        });
    }`
1 голос
/ 10 марта 2015

У меня была такая же проблема, я думаю, вы используете скрипты, предоставленные Facebook. В этом случае у вас есть функция, связанная с событием window.fbAsyncInit. Это происходит каждый раз, когда страница загружается. В конце этого метода у вас есть код:

FB.getLoginStatus(function(response) { statusChangeCallback(response); });

Функция statusChangeCallback проверяет статус вашего пользователя в Facebook (подключен, авторизован или неизвестен). Здесь, если пользователь «подключен», вы заходите на свой сайт. Ну, в этом-то и проблема, вы всегда пытаетесь войти в систему через Facebook.

Это должно происходить только при нажатии, поэтому вы должны стереть эти строки

0 голосов
/ 13 июня 2012

Если у вас есть:

FB.Event.subscribe('auth.login', function() {
   fbLogin(this);
});

Попробуйте прокомментировать это / * fb.Event ..... * /

0 голосов
/ 20 января 2011

привет, дорогой, я думаю, что вы так запутали свой вопрос. Ваш вопрос не говорит о том, что вы на самом деле хотите. Насколько я понял, я думаю, что вы хотите подключить пользователя к вашему сайту через Facebook Connect, и вы хотите, когда пользователь нажимает на выход из Facebook, он автоматически выходит из вашего сайта. если мое понимание вашего вопроса правильное, тогда просто дайте пользователю войти в систему через Facebook и выполнить вход в вашу систему в событии FB.Event.Subscribe. Используйте следующий код для кнопки входа в систему

<fb:login-button perms='email' autologoutlink='true'>

Когда пользователь разрешит вашей учетной записи Facebook подключаться к вашему сайту

<div id="fb-root">
 <script>
   window.fbAsyncInit = function() {
   FB.init({appId: "Your APP ID",
            status: true,
            cookie: true,
            xfbml: true});
    FB.getLoginStatus(function(response) {
      if (response.session) {
        // Send here parameters that logins to your system through your website login system

      } else {

    }
    });    
    FB.Event.subscribe("auth.login", function(response) {
    window.location.reload();
      });
FB.Event.subscribe("auth.logout", function(response) {
    window.location.reload();

    //Send the Parameters that logouts user from your website through your website logout system;
      });
       };
   (function() {
     var e = document.createElement("script");
     e.type = "text/javascript";
     e.src = document.location.protocol +
     "//connect.facebook.net/en_US/all.js";
     e.async = true;
     document.getElementById("fb-root").appendChild(e);
   }());


 

и поместите весь код выше сразу после вашего тега

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...