【问题标题】:Facebook Logout from my website in Laravel从我在 Laravel 的网站上注销 Facebook
【发布时间】:2017-07-03 15:18:01
【问题描述】:

当我点击注销时...我在控制台中得到这个异常:

在没有访问令牌的情况下调用 FB.logout()。

问题:我已经在 Session 中保存了访问令牌,并且我也可以在客户端访问它。我已经检查了这个答案,但无法理解如何调用 handleSessionResponse 方法以及单击注销按钮时的响应值如何? https://stackoverflow.com/a/8430670/726802

我在布局页面(母版页)中有以下代码。

<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '{!! env("FACEBOOK_APP_ID") !!}',
            xfbml      : true,
            version    : '{!! env("Facebook_Version") !!}'
        });
        FB.AppEvents.logPageView();
    };
    (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
</script>

下面是blade(内容页)中的代码

<ul class="nav nav-sidebar">
    <li class="active"><a href="#" onclick="logout();">Logout</a></li>
</ul>

<script>
    function checkLoginState() {
        FB.getLoginStatus(function(response) {
            if (response.status === 'connected') {

            } else {
            }
        });
    }

    function logout() {
        debugger;
        FB.logout(function(response) {
            debugger;
            // user is now logged out
        });
    }
</script>

【问题讨论】:

标签: facebook-javascript-sdk laravel-5.3 facebook-php-sdk laravel-5.4


【解决方案1】:

似乎在页面更改时访问令牌不是持久的,请尝试将会话存储在 cookie 中,如评论中所说的 CBroe,如下所示:

<script>
  window.fbAsyncInit = function() {
    FB.init({
        appId      : '{!! env("FACEBOOK_APP_ID") !!}',
        xfbml      : true,
        status     : true,
        cookie     : true,
        version    : '{!! env("Facebook_Version") !!}'
    });
    FB.AppEvents.logPageView();
  };
  (function(d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) {return;}
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_US/sdk.js";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, 'script', 'facebook-jssdk'));
</script>

【讨论】:

  • 注销有什么用处?
  • @Pankaj 因为会话在您的应用程序中是持久的,即使您更改到其他页面注销也可以获得访问令牌。
  • 在哪里可以查看注销事件?
  • @Pankaj 你是什么意思?在哪里可以检查它是否从 FB 注销?
  • 我查了一下,这只是在做初始化工作。就是这样。
【解决方案2】:

使用FB.getLoginStatus 获取Facebook JS SDK 维护的活动访问令牌。并使用响应调用FB.logout

function fbLogoutUser() {
    FB.getLoginStatus(function(response) {
        if (response && response.status === 'connected') {
            FB.logout(function(response) {
                // needed for older versions of SDK
                FB.Auth.setAuthResponse(null, 'unknown');
                // reload to remove accessToken from browser cookies
                document.location.reload();
            });
        } else{
            // You are not logged in
        }
    });
}

注销后重新加载页面将从浏览器 cookie 中删除当前会话的访问令牌。

【讨论】:

  • 在您的原始代码中,我可以看到FB.initFB.AppEventsFB.logout,如果在那个实例中没有未定义FB,那么这里也不应该未定义。确保在 FaceBook JS SDK 初始化并且 FB 可用后调用它。
  • 这是原来的问题。我收到异常:FB.logout() 调用时没有访问令牌。
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 2012-07-24
  • 2012-05-04
  • 2014-03-21
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多