gpt4 book ai didi

javascript - 使用 Facebook Javascript API 将用户注销并重新登录

转载 作者:行者123 更新时间:2023-12-01 14:24:42 25 4
gpt4 key购买 nike

我希望我网站上的用户点击一个按钮,将他们从 Facebook 注销,然后弹出登录提示,以便他们可以再次登录。我正在使用 Javascript SDK。

我尝试在回调中使用 login() 调用 logout()。这基本上可以工作,但几乎所有现代浏览器都会阻止登录弹出窗口。由于 logout() 是异步的,因此 login() 不会通过点击事件处理。

我也试过调用 logout() 后立即调用 login() 但毫不奇怪,logout() 没有及时生效。我在注销和登录之间尝试了一个大循环,以尝试拖延足够长的时间。那行不通,即使有它也很容易出错。

所有关于进行同步 Facebook 调用的建议都是“你做错了”的那种,但在这种特殊情况下,这种限制是由浏览器强加的,我不能随意更改它。

有没有办法让用户注销,然后立即提示他们重新登录?我想在 Javascript 中处理这个问题,而不是重定向到注销或登录页面。

最佳答案

不确定这是否可行但是......

第 1 步:在您的 facebook 初始化代码中,为 auth.authResponseChange 注册一个事件监听器,当您检测到 response.status==='not_authorized' 时,您将一些“全局”js 变量设置为标志

第 2 步:在按钮的点击处理程序中,在注销调用之后...使用一个 while 循环等待“全局”变量被设置,然后调用 FB.login

<script>

// Create a "global" flag which will be set when the user has logged out
FB_LOGGED_OUT_FLAG=0;

window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR_APP_ID', // App ID
channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});

FB.Event.subscribe('auth.authResponseChange', function(response) {
if (response.status === 'connected') { FB_LOGGED_OUT_FLAG=0
} else if (response.status === 'not_authorized') {FB_LOGGED_OUT_FLAG=0
} else { //SET YOUR GLOBAL FLAG
FB_LOGGED_OUT_FLAG =1;

}
});
};

var MY_SWITCH_USER_BUTTON_HANDLER = function(){
FB.logout();
while(!FB_USER_LOGGED_OUT_FLAG) {}
FB.login()
}

// Load the SDK asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));

}


</script>

不确定这是否会在 while 循环执行时锁定用户的机器。我认为不会,它只会在您页面的线程内执行

关于javascript - 使用 Facebook Javascript API 将用户注销并重新登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19431632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com