0

FB.getLoginStatus() と FB.Login() を使用して、Facebook を使用してユーザーを自分の Web サイトにログインさせています。最初に FB.getLoginStatus() を使用してページ読み込みのステータスを確認し、その状態を隠し変数に保存します。ユーザーが Facebook のログイン ボタンをクリックすると、まず隠し変数の値を確認し、FB.getLoginStatus() が接続されていない場合にのみ FB.Login() を呼び出します。FB.getLoginStatus() が「接続済み」を返す場合、FB.Login() を使用せずにユーザーを Web サイトにログインさせるだけです。

問題のある私のシナリオ * ユーザーが Facebook を使用して自分のアカウントにログインする * ユーザーが自分の Web サイトからログアウトする * 私の Web サイトがログアウト状態で開いている * 別のタブで、現在の Facebook ユーザーが Facebook からログアウトし、新しいユーザーが Facebook にログインする *ユーザーが私のウェブサイトに戻ってきて、ページを更新せずに Facebook のログイン ボタンをクリックする *古い Facebook ユーザー (現在 Facebook にログインしているユーザーではない) が私のアカウントにログインしている

ユーザーがFacebookのログインボタンをクリックしたときに、Facebookの最新のユーザーを特定するにはどうすればよいですか?

<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<div id="fb-root">
</div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
// initialize the library with your Facebook API key    

var AppID = '<%=AppID%>';

window.fbAsyncInit = function() {
FB.init({
appId: AppID,
status: true,
cookie: true,
xfbml: true,
channelUrl: 'http://<%=Request.ServerVariables("HTTP_HOST")%>/channel.html'
});

FB.Event.subscribe('auth.login', function(response) {
//alert('logged in');
});

FB.Event.subscribe('auth.logout', function(response) {
//alert('logged out');
});

FB.getLoginStatus(function(response) {
if (response.status === "connected") {
var uid = response.authResponse.userID;
document.getElementById('hdnFBConnected').value = uid;
}
else if (response.status === "not_authorized") {
//alert("Not authorized");
document.getElementById('hdnFBConnected').value = '';
}
else {
//alert("user not logged in to facebook");
document.getElementById('hdnFBConnected').value = '';
}
});
}; 
</script>

<a href="#" onclick="WindowOpen()"><img src="<%=global_language & "/images/FacebookSmall.gif"%>" /></a>

<script type="text/javascript" language="javascript">
function WindowOpen() {

if (document.getElementById('hdnFBConnected').value != '') //user is connected
{
FB.api('/me', { fields: 'first_name, last_name, locale, email' }, function(result) {

var uid = document.getElementById('hdnFBConnected').value;    

//log the user into my site
})
}
else { //user is not connected, so calling FB.Login()
FB.login(function(response) {
if (response.authResponse) {
var access_token = response.authResponse.accessToken;

FB.api('/me', { fields: 'first_name, last_name, locale, email' }, function(result) {

var uid = response.authResponse.userID;    

var globalLang = '<%=global_language%>';
//log the user into my site                            })
}
else {
//alert('User cancelled login or did not fully authorize.');
}
}, { scope: 'email' }
); 
}

}
</script> 

</body>
4

1 に答える 1

0

あなたが説明しているのは正常な動作です。JS SDK は、新しいユーザーが自分のアカウントにアクセスできるようにする古いユーザーのsigned_requestオブジェクトを送信しています。これはあなたに関係することなので、アプリのページにログアウトボタンを含め、アプリの使用が終わったらそのボタンをクリックすることが重要であることをユーザーに知らせてください。ログアウト ボタンは次のFB.logoutように呼び出す必要があります。

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

セキュリティを強化するために、非アクティブ状態が X 分間続くとユーザーにボタンをクリックするように求めるアクティビティ タイマーを作成できます。ユーザーが 1 分以内にクリックしない場合、ユーザーは自動的にログアウトされます。これは、ほとんどの銀行サイトがセッション セキュリティを処理する方法です。

于 2012-07-31T21:41:04.573 に答える