TL;DR Facebook javascript SDK cannot determine the accurate login status of a user who has directly logged out from facebook.com underneath it.
I m 利用javascript SDK进行认证。 我已注意到,当用户日直接从Facebook(面读书.com)上抽出时,SDK不能对用户的标识表示感觉。 我ve倒了以下简单测试案例。
Log in to facebook.com in one tab. In another tab, render the app page below (replacing MY_APP_ID as appropriate). If you are logged into facebook as a user that has never given permissions to this app, click "Login" and grant them. Either way, you should see some events fire indicating you are logged in.
Now, back on the facebook.com tab, log out of facebook. Go to the app tab and click all the buttons (except "Login") and look at the browser console output.
当打电话到
时,就没有发生。 这种倒退从来就没有了。 在 Chrome,给出了以下错误:“Unsafe Java 试图与URL 。 http://www.facebook.com/“http://www.facebook.com/>。 域、议定书和港口必须匹配 当打电话到“FB.get CarloinStatus时,答复说“有关系”,并有一个反应物体。 但是,这并不有用,因为它现在不正确。 相反,如果“部队”参数的真实性得到通过,那么就没有发生(从来就不需要追索)。
当打电话到
时,就没有发生任何情况(从来就没有打回)。 在上述任何事件中,都没有发生任何相关事件(在脱衣物后)。
问题在于,在这种情形下,似乎无法合法地确定从SDK的用户标识状况。 或者,我做一些事情,尽管我把它推倒到最低限度。
我在此的最终目标是,如果用户在已经从脸书上砍伐后点击我的原木,我就能够做,<<>~em>。 但是,SDK没有实现这一目标的可行手段。
Any ideas or thoughts? Has anyone else experienced this and found a workaround? Thanks!
简单一页:
<html lang= en xml:lang= en xmlns= http://www.w3.org/1999/xhtml xmlns:fb= http://www.facebook.com/2008/fbml >
<head>
</head>
<body>
<script>
window.fbAsyncInit = function() {
function subFBEvent(name) {
FB.Event.subscribe(name, function(r) {
console.log(name);
console.log(r);
});
}
subFBEvent( auth.login );
subFBEvent( auth.logout );
subFBEvent( auth.authResponseChange );
subFBEvent( auth.statusChange );
FB.init({
appId : MY_APP_ID ,
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
oauth : true // use OAuth 2.0
});
};
(function() {
var s = document.createElement( div );
s.setAttribute( id , fb-root );
document.documentElement.getElementsByTagName("body")[0].appendChild(s);
var e = document.createElement( script );
e.src = http://connect.facebook.net/en_US/all.js ;
e.async = true;
s.appendChild(e);
}());
</script>
<button onclick="FB.logout(function(r) { console.log( FB.logout ); console.log(r); });">Logout</button>
<button onclick="FB.getLoginStatus(function(r) { console.log( FB.getLoginStatus ); console.log(r); });">LoginStatus</button>
<button onclick="FB.getAuthResponse(function(r) { console.log( FB.getAuthResponse ); console.log(r); });">AuthResponse</button>
<fb:login-button>Login</fb:login-button>
</body>