2016-08-13 62 views
0

我想讓FB.logout()功能工作。FB.logout問題,FB.getLoginStatus()返回未知狀態

然後我得到的錯誤是FB.logout()調用沒有訪問令牌。 所以我搜索了一些解決方案。所以我發現我們必須得到地位,然後嘗試。所以當我嘗試獲取LoginStatus()時。 authResponse爲空,狀態未知。

所以我不知道是什麼原因,我沒有得到authResponse。

我附上我的代碼。

Controller.js

app.controller("dashboardCtrl",["$scope","authFactory","$location",function($scope,authFactory,$location){ 
var userObj = authFactory.getUserObj(userObj); 
console.log(userObj); 

var accessToken = authFactory.getAccessToken(); 
console.log(accessToken); 
$scope.accessToken = accessToken; 

$scope.FBout = function(){ 

    FB.getLoginStatus(function(response) { 
     console.log(response); 
     if (response.status === 'connected') { 

      var uid = response.authResponse.userID; 
      var accessToken = response.authResponse.accessToken; 

      FB.logout(function(response) { 
       authFactory.clearCookie(); 

      }); 
     } else if (response.status === 'not_authorized') { 

     } else { 
     } 
    }); 
}; 
}]); 

factory.js

app.factory("authFactory",["$cookies","$location",function($cookies,$location){ 
var authFactory = {}; 

authFactory.setAccessToken = function(accessToken){ 
    $cookies.put("accessToken",accessToken); 
} 

authFactory.getAccessToken = function(){ 
    return $cookies.get("accessToken"); 
} 

authFactory.getUserObj = function(){ 
    var userObj = $cookies.get('userObj'); 

    if(userObj){ 
     return userObj; 
    } 
    else { 
     console.log("error"); 
    } 
} 

authFactory.clearCookie = function(){ 
    $cookies.remove("accessToken"); 
    $location.path("/") 


} 
return authFactory; 
}]); 

我不能註銷並重定向到一些其它頁面。我卡住了,我有accesstoken,並在cookie中的用戶對象。

我確定我沒有在Chrome設置中選中第三方應用程序訪問。

用另一個我登錄的控制器進行更新,這可能是必需的。

app.controller('homeCtrl',["$scope","authFactory","$location","$cookieStore",function($scope,authFactory,$location,$cookieStore){ 
$scope.name = "login Please"; 

$scope.FBLogin = function(){ 

    FB.login(function(response) { 
if (response.authResponse) { 
console.log('Welcome! Fetching your information.... '); 
FB.api('/me', function(response) { 

    console.log('Good to see you, ' + response.name + '.'); 
    $cookieStore.put("userObj",response); 
    var accessToken = FB.getAuthResponse().accessToken; 
    authFactory.setAccessToken(accessToken); 

    $location.path("/dashboard"); 
    $scope.$apply(); 
}); 
} else { 
console.log('User cancelled login or did not fully authorize.'); 
} 
}); 

}; 

}]); 

這是我Route.js

app.config(["$routeProvider",function($routeProvider){ 
$routeProvider 
    .when("/",{ 
     templateUrl : 'views/home/login.html', 
     controller : 'homeCtrl' 
    }) 

    .when("/dashboard",{ 
     templateUrl : 'views/home/dashboard.html', 
     controller : 'dashboardCtrl', 
     authenticated : true 
    }) 

    .otherwise('/',{ 
     templateUrl : 'views/home/login.html', 
     controller : 'homeCtrl' 
    }) 

}]); 

app.run(["$rootScope","$location","authFactory",function($rootScope,$location,authFactory){ 
$rootScope.$on('$routeChangeStart',function(event,next,current){ 
    if(next.$$route.authenticated){ 
     var userAuth = authFactory.getAccessToken(); 
     if(!userAuth){ 
      $location.path('/'); 
     } 
    } 
}); 
}]); 
+0

新增的路線,控制器在登錄完成 –

回答

0

嘗試FB.getLoginStatus禁用緩存:

FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
     FB.logout(function(response) { 
      authFactory.clearCookie(); 
     }); 
    } 
}, true); 

的更多信息:https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus#servers

+0

嗨..我試過你的解決方案。但作爲getLoginStatus()返回一個響應..該response.status值本身是未知的。 我不知道我哪裏錯了。 –

+0

我相信,我目前登錄。因爲我可以訪問數據。我不知道我去哪裏真的錯了。請幫我解決 –

+0

如果它沒有返回任何東西,那麼我很肯定你沒有登錄。嘗試api調用:FB.api('/ me',function(response){...。並且看看你是什麼得到 – luschn

相關問題