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>