开发者

Facebook Connect disable auto login

开发者 https://www.devze.com 2023-02-05 05:09 出处:网络
I integrated the graph api facebook connect but if we are login to facebook, we will automatically login to the site with facebook connect as well. Is there any way we let the user clicks on fb \"Logi

I integrated the graph api facebook connect but if we are login to facebook, we will automatically login to the site with facebook connect as well. Is there any way we let the user clicks on fb "Login" only then the user is connected to the site with their fb account?

Now the user is automatically login to the site without the option to choose whether they would want to use their facebook account. If they want to logout from the site, they need to logou开发者_开发技巧t from facebook completely only then they can logout from the site with facebook connect as well.

Anyone can help me or give some tips how to go about? Thank you!


I had this same problem on a recent website, and found a way to overcome it. My solution allowed a user to already be logged into facebook on their computer, yet not have it auto login on my website, then they can login with Facebook Login button and finally when they logout it won't log them out of Facebook on their computer, just on my website (much like Digg does with facebook).

To do it I was using https://github.com/facebook/php-sdk/ to check within PHP if there was an active facebook session with the user and the website (which would cause the auto login). If there was, I would not echo the auto login code:

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

but instead just render my own facebook login button that would link to "process-login.php".

process-login.php would set the custom $_SESSION variable that told my website someone was logged (whether via my own system, or via facebook), and then reload the referring page (using $_SERVER['HTTP_REFERER']) which would now display the user as logged in via Facebook since my own $_SESSION variable was now set. To log them out (without logging them out of Facebook entirely, just my website), I would just load a logout script that removed the $_SESSION variable.

The example.php (in the php-sdk on github) was very helpful at finding my solution, though I had to customise it significantly to make it work with my existing system. It at least helped me see how to access the facebook session variable in PHP (stored in $me in the example).

Hope this helps you if its still a problem, or that it helps someone else in this situation.

EDIT: Turns out I still had some issues with auto login on the rare occasion. To fix it I removed the event.subscribe('auth.login') and make a facebook button that called the following function to check login status before subscribing to the auth.login even. Here is the function:

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


I had the same problem, I guess that you are using the scripts provided by facebook. In that case you have a function associated with the window.fbAsyncInit event. This happens everytime that the page is loaded. At the end of this method you have the code:

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

The function statusChangeCallback verifies your user's facebook status (connected, authorized, or unknown). Here, if the user is "connected" you log him into your site. Well that's the problem, you are always trying to log the user in with facebook.

This must only happen on click, so you should erase those lines


hello dear I think you have made your question so confused. Your question is not stating what actually do you want. As for as I have understood I think you want to connect the user to you site through facebook connect and you want when user clicks on facebook logout, it automatically logouts from your site. if my understanding about your question is right then simply let the user to login through facebook and do logins in your system in FB.Event.Subscribe event. Use the following code for login button

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

When user will allow your his facebook account to connect with your site

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


 

and put the above whole code right after your <body> tag


If You have:

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

Try to comment it /* fb.Event..... */

0

精彩评论

暂无评论...
验证码 换一张
取 消