Facebookを統合して作成したWebサイトからログアウトしようとしています。ログインは正常に動作しますが、Firebugからログアウトしたい場合は常にこのエラーが表示されます。
FB.logout()
はアクセストークンなしで呼び出されます。
Facebook JavaScript SDKを使用しています。ログアウトする必要があるコードは次のようになります。
_$(document).ready($(function () {
$("#fblogout").click(facebooklogout);
}));
function facebooklogout() {
FB.logout(function (response) {
}
)};
_
これは、 Facebook Developers Documentation で指定されたログアウトコードであり、document.readyのメソッドがボタンに割り当てられています。
このコードの前にFB.init()
メソッドがあり、すべて正常に実行されます。
FB.logoutにアクセストークンがない理由について誰かが解決策を見つけた場合は、感謝します。
Facebook graph APIを使用するアプリケーションからログアウトするには、ログアウトページで<form>
タグの直後にある次のJavaScriptを使用します。
window.onload=function()
{
// initialize the library with your Facebook API key
FB.init({ apiKey: 'b65c1efa72f570xxxxxxxxxxxxxxxxx' });
//Fetch the status so that we can log out.
//You must have the login status before you can logout,
//and if you authenticated via oAuth (server side), this is necessary.
//If you logged in via the JavaScript SDK, you can simply call FB.logout()
//once the login status is fetched, call handleSessionResponse
FB.getLoginStatus(handleSessionResponse);
}
//handle a session response from any of the auth related calls
function handleSessionResponse(response) {
//if we dont have a session (which means the user has been logged out, redirect the user)
if (!response.session) {
window.location = "/mysite/Login.aspx";
return;
}
//if we do have a non-null response.session, call FB.logout(),
//the JS method will log the user out of Facebook and remove any authorization cookies
FB.logout(handleSessionResponse);
}
コードは機能し、私のサイトで公開されています。
私はそれほどささいな解決策に行きました:
function facebookLogout(){
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
FB.logout(function(response) {
// this part just clears the $_SESSION var
// replace with your own code
$.post("/logout").done(function() {
$('#status').html('<p>Logged out.</p>');
});
});
}
});
}
私はこのようなことを試しました:
function fbLogout(){
if(typeof FB.logout == 'function'){
if (FB.getAuthResponse()) {
FB.logout(function(response) { window.location.href = PROJECT_PATH + '/index/logout'; });
return;
}
};
window.location.href = PROJECT_PATH + '/index/logout';
return;
}
もっとこのようなものでなければなりません。セッションだけでなくauthResponseを使用する必要があるJS APIに変更がありました。
//handle a session response from any of the auth related calls
function handleSessionResponse(response) {
//if we dont have a session (which means the user has been logged out, redirect the user)
if (!response.authResponse) {
return;
}
//if we do have a non-null response.session, call FB.logout(),
//the JS method will log the user out of Facebook and remove any authorization cookies
FB.logout(response.authResponse);
}
エラーには、アクセストークンがないため、FB.getAccessToken()関数を使用してアクセストークンを確認する必要があることが示されています。
アクセストークンがない場合、関数はnullを返します。以下の例を参照してください。
function facebooklogout() {
try {
if (FB.getAccessToken() != null) {
FB.logout(function(response) {
// user is now logged out from facebook do your post request or just redirect
window.location.replace(href);
});
} else {
// user is not logged in with facebook, maybe with something else
window.location.replace(href);
}
} catch (err) {
// any errors just logout
window.location.replace(href);
}
}
何度も試してみて、それを考え出した。実際、response
をFB.logoutに渡します。
一般的にresponse.authResponse.accessToken
にはトークンが含まれます。そのため、accessTokenに関するエラーは存在しません。
論理的に考えると、その応答はコードのどこから来ているのでしょうか?どこからともなく。
そのため、関数からその応答オブジェクトを取得し、ログアウト関数に渡す必要があります。他の人にどのように機能したかはわかりませんが、これは私には機能しました。
コードをこれに置き換えるだけ
function logout(){
FB.getLoginStatus(function(response) {
FB.logout(function(response){
console.log("Logged Out!");
window.location = "/";
});
});
}
ここでは、ユーザーがログインしている場合にログインステータスを取得し、それに対応する応答を取得します。これには、必要なすべてのトークンとデータが含まれています。そして、この応答をログアウト機能に渡します。