Eugenio
Eugenio

Reputation: 119

Facebook logout button and redirect after logout

I use this code

<fb:login-button autologoutlink="true" perms="user_likes" size="large"></fb:login-button>

to create a login/logout fb button. Everything works, after the login, the login button become a logout button. But If the user click on the logout button, the current page is not refreshed and so all the things that should appear only when the user is authenticated are still there until a manual page refresh is done.

This doesn't happen if I get the logout url (Javascript SDK)

$logoutUrl = $facebook->getLogoutUrl();

and then implement a logout button myself; in that case a proper "next" parameter (with the url of the current page) is passed and the current page is reloaded.

I still would like to use the first solution, is it possible to make it use the "next" parameter?

Upvotes: 9

Views: 33522

Answers (3)

user1052933
user1052933

Reputation: 191

Above answer by Piskvor did it for me. Its crazy how many hours I've spend trying to figure this out.

Main problem with plugins such as this Facebook for CakePHP is that they don't come with updates. APIs, especially popular ones like Facebook, change all the time because they are being imporved. If the guy who wrote it initially as a hobby moves on with his life and stops updating the SDK people who are less knowladgable on how to alter these things become stuck.

WORKING CODE:

Nevertheless, thanks for a great solution Piskvor, here is my piece of code for

apps/plugins/facebook/views/helpers/facebook.php

            $init .= $this->Html->scriptBlock(
<<<JS

window.fbAsyncInit = function() {
    FB.init({
        appId : '{$appId}',
        session : {$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.logout", function() {
       window.location = '/users/logout'
     });
    {$callback}
};

The key piece of code here is:

     FB.Event.subscribe("auth.logout", function() {
         window.location = '/users/logout'
     });
    {$callback}

Upvotes: 1

Fernando JS
Fernando JS

Reputation: 4317

For integrated authentication (Facebook + Asp.Net MVC), I just use Javascript and FormsAuthentication.SignOut();

function LogoutFacebook() {    
FB.logout(function (response) {
    window.location = "/facebook/logout/";
});   }

Upvotes: 1

Piskvor left the building
Piskvor left the building

Reputation: 92752

Do the redirect yourself - add this to JavaScript, somewhere after FB.init():

<script>
  FB.Event.subscribe("auth.logout", function() {window.location = '/logout'});
</script>

This function will fire when logout through the FB button happens.

Upvotes: 16

Related Questions