我需要在从Facebook JS sdk调用FB.logout
后触发我的服务器端代码。这是我的html外观
<asp:LinkButton ID="lbtnSignOut" runat="server" Text="Sign Out" OnClientClick="return Logout();" OnClick="lbtnSignOut_Click"></asp:LinkButton>
和js代码
function Logout() {
var currentToken = "<%= Session["AccessToken"]%>";
if (currentToken != null && currentToken != '') {
FB.logout(function (response) {
});
}
return true;
}
随后在服务器端代码中,我清除所有特定于应用程序的会话,并使用FormsAuthentication签出呼叫签名用户并重定向到不同的页面。
现在问题是,当我从js函数返回 true 时,服务器端代码会在不等待fb.logout完成调用的情况下触发,并且用户令牌不会过期,用户是自动重新登录 FB.Event.subscribe(&#39; auth.authResponseChange&#39;,功能(响应){}; 调用我从标准代码中选择的页面加载。< / p>
FB.Event.subscribe('auth.authResponseChange', function (response) {
if (response.status === 'connected') {
//SUCCESS
//the user is logged in and has authenticated your
// app, and response.authResponse supplies
// the user's ID, a valid access token, a signed
// request, and the time the access token
// and signed request each expire
var currentToken = "<%= Session["AccessToken"] %>";
if (currentToken == null || currentToken == '') {
// Handle the access token
// Do a post to the server to finish the logon
// This is a form post since we don't want to use AJAX
var accessToken = response.authResponse.accessToken;
var form = document.createElement("form");
form.setAttribute("method", 'post');
form.setAttribute("action", '/facebookLogin.ashx');
var field = document.createElement("input");
field.setAttribute("type", "hidden");
field.setAttribute("name", 'AccessToken');
field.setAttribute("value", accessToken);
form.appendChild(field);
document.body.appendChild(form);
form.submit();
}
}
else if (response.status === 'not_authorized') {
//FAILED
console.log('User cancelled login or did not fully authorize.');
}
else {
//UNKNOWN ERROR
console.log('Logged Out.');
}
});
};
如果我将值设置为 false ,则用户从Facebook注销,但我的自定义代码无法启动。
所以我的问题是如何在facebook js sdk注销代码被解雇后调用服务器端代码?
任何帮助或指示将非常感谢!!!
Paritosh
答案 0 :(得分:0)
将return返回true放在function(response){}块中,这样只有在FB.logout调用返回时才会调用