Facebook从我的网站Laravel

时间:2017-07-03 15:18:01

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

当我点击退出时...我在控制台中收到此异常:

  

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

问题:我已经在Session中保存了Access令牌,我也可以在客户端访问它。我已经检查了这个答案,并且无法理解我如何调用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>

以下是刀片中的代码(内容页面)

<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>

2 个答案:

答案 0 :(得分:2)

当更改页面时,似乎访问令牌不是持久的,尝试将会话存储在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>

答案 1 :(得分:0)

使用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中删除当前会话的访问令牌。