Javascript 自动登录facebook-FB.Event.subscribe auth.login不工作
由于某种原因,今天我为现有成员自动登录的代码坏了。 通常这段代码工作得很完美,在与firebug进行检查后,我发现由于某种原因在查找'auth.login'时出现问题,因此调用window.location.reload;它不起作用了。如果我手动刷新,则成员显示为正确连接,问题在于会话打开前的自动登录需要页面刷新 我还试图查看问题是否只是“auto.login”,并将其替换为“auth.authResponseChange”,当我这样做时,页面一直在刷新。。。所以我认为问题在于'auth.login'触发器。 是否有人知道facebook出于特殊原因或做出任何可能导致此问题的更改 *更新*错误已解决!facebook解决了这个问题 facebook在这里报告并回答了这个bug- 顺便说一句,这里有一个工作代码:Javascript 自动登录facebook-FB.Event.subscribe auth.login不工作,javascript,facebook,api,facebook-javascript-sdk,Javascript,Facebook,Api,Facebook Javascript Sdk,由于某种原因,今天我为现有成员自动登录的代码坏了。 通常这段代码工作得很完美,在与firebug进行检查后,我发现由于某种原因在查找'auth.login'时出现问题,因此调用window.location.reload;它不起作用了。如果我手动刷新,则成员显示为正确连接,问题在于会话打开前的自动登录需要页面刷新 我还试图查看问题是否只是“auto.login”,并将其替换为“auth.authResponseChange”,当我这样做时,页面一直在刷新。。。所以我认为问题在于'auth.log
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '<?php =$APP_ID ?>',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
oauth : true
});
// Additional initialization code here
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
};
// 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#xfbml=1";
ref.parentNode.insertBefore(js, ref);
}(document));
</script>
看来我也遇到了同样的问题 直到几个小时前,当一个已经授权并登录到我的应用程序的用户之前打开我的网站,cookie过期时,出现了登录按钮,但几秒钟后JS SDK触发登录功能的时间,他被自动登录,页面被重新加载,没有登录按钮和用户信息 现在,当一个已经注册的用户在cookie过期后打开我的站点时,登录按钮会再次出现,但用户不会自动登录,页面也不会像以前那样重新加载。奇怪的是,如果我点击登录按钮,它也不工作!如果我现在手动刷新页面,登录按钮将消失,并显示用户信息,因此用户似乎已实际登录,但未捕获事件以触发页面重新加载 如果我使用PHPSDK手动注销并再次登录,那么一切都可以正常工作 我的代码:
<script>
window.fbAsyncInit = function() {
FB.init({
appId: '<?php echo $facebook->getAppID() ?>',
cookie: true,
xfbml: true,
oauth: true
});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
FB.Event.subscribe('auth.logout', function(response) {
window.location.reload();
});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
function facebookLogin() {
FB.login(function(response) {
// handle the response
}, {scope: 'email, publish_stream, read_friendlists'});
}
</script>
所以现在当用户在令牌过期后打开我的页面时:
php sdk检测到他没有登录,并显示登录对话框
像以前一样
javascriptsdk触发登录函数,如
之前
在我知道之前,用户会定期登录
现在可以确定,因为它会弹出警报:服务器的状态
会话:已连接
但是未触发事件auth.login->
脚本不知道已成功登录->页面未成功登录
重新加载
看来我也遇到了同样的问题 直到几个小时前,当一个已经授权并登录到我的应用程序的用户之前打开我的网站,cookie过期时,出现了登录按钮,但几秒钟后JS SDK触发登录功能的时间,他被自动登录,页面被重新加载,没有登录按钮和用户信息 现在,当一个已经注册的用户在cookie过期后打开我的站点时,登录按钮会再次出现,但用户不会自动登录,页面也不会像以前那样重新加载。奇怪的是,如果我点击登录按钮,它也不工作!如果我现在手动刷新页面,登录按钮将消失,并显示用户信息,因此用户似乎已实际登录,但未捕获事件以触发页面重新加载 如果我使用PHPSDK手动注销并再次登录,那么一切都可以正常工作 我的代码:
<script>
window.fbAsyncInit = function() {
FB.init({
appId: '<?php echo $facebook->getAppID() ?>',
cookie: true,
xfbml: true,
oauth: true
});
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
});
FB.Event.subscribe('auth.logout', function(response) {
window.location.reload();
});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
function facebookLogin() {
FB.login(function(response) {
// handle the response
}, {scope: 'email, publish_stream, read_friendlists'});
}
</script>
所以现在当用户在令牌过期后打开我的页面时:
php sdk检测到他没有登录,并显示登录对话框
像以前一样
javascriptsdk触发登录函数,如
之前
在我知道之前,用户会定期登录
现在可以确定,因为它会弹出警报:服务器的状态
会话:已连接
但是未触发事件auth.login->
脚本不知道已成功登录->页面未成功登录
重新加载
我也有同样的问题。如果用户连接了我的应用程序且访问令牌已过期,javascript SDK会让用户自动登录并重新加载页面 我通过切换到auth.statusChange而不是auth.login解决了这个问题。
然后,我使用PHP Facebook SDK检查用户是否已登录,如果已登录,我不会订阅javascript中的auth.statusChange事件。如果用户登录时确实在javascript中包含auth.statusChange,那么最终将进入无限页面刷新循环,至少我的实现就是这样。我遇到了完全相同的问题。如果用户连接了我的应用程序且访问令牌已过期,javascript SDK会让用户自动登录并重新加载页面 我通过切换到auth.statusChange而不是auth.login解决了这个问题。 然后,我使用PHP Facebook SDK检查用户是否已登录,如果已登录,我不会订阅javascript中的auth.statusChange事件。如果在用户登录时在javascript中包含auth.statusChange,则最终将进入无限页面引用
resh循环,至少我的实现是这样。我将auth.login更改为auth.statusChange,并将所有内容包装在getLoginStatus中,因此它仅在未连接时运行,看起来工作正常。看起来像这样的inside window.fbAsyninit=函数{
FB.getLoginStatus(function(response) {
if (response.status != 'connected') {
FB.Event.subscribe('auth.statusChange', function(response) {
if (response.authResponse) {
// whatever code runs when user logs in
}
});
}
});
我将auth.login更改为auth.statusChange,并将所有内容包装在getLoginStatus中,因此它仅在未连接时运行,看起来工作正常。类似于window.fbAsyncint=函数中的以下内容{
FB.getLoginStatus(function(response) {
if (response.status != 'connected') {
FB.Event.subscribe('auth.statusChange', function(response) {
if (response.authResponse) {
// whatever code runs when user logs in
}
});
}
});
这可以工作…很好的原创方式,但这就像一个后门…我看了FB.event.subscribe的facebook原始页面,那里没有什么新内容…如果这在未来几天内无法修复,我将使用并批准您的解决方案,非常感谢。在这个主题上打开了一个bug-正如您可以看到faceboook团队的一位成员所写的-我们已经修复了以前的一个错误,每次加载页面时都会触发auth.login,而不是仅当状态从未知变为已连接时才触发,即用户在使用应用程序时登录Facebook。auth.statusChange和auth.authResponseChange事件仍会像以前一样触发,并且您应该能够相应地修改代码。在我看来,它们都是错误的ed修复了一个bug,但又引入了一个新bug…我还是会继续使用我的补丁。事实上,这是一个很好的解决方案,因为如果用户连接,它会删除一些多余的代码。这可以工作…很好的原创方式,但这就像一个后门…我看了facebook上FB.event.subscribe的原始页面,那里没有什么新内容…如果这不起作用的话在接下来的几天内修复我将使用并批准你的解决方案非常感谢。在这个问题上出现了一个bug——正如你可以看到faceboook团队的一个团队所写的那样——我们修复了以前的一个bug,在每个页面加载时都会触发auth.login,而不仅仅是当状态从未知变为已连接时,即登录Facebook的用户e正在使用你的应用程序。auth.statusChange和auth.authResponseChange事件仍然会像以前一样触发,你应该能够相应地修改你的代码。在我看来,他们试图修复一个错误,但却引入了一个新的错误…我将继续使用我的修复程序。事实上,这是一个很好的解决方案,因为如果用户s Connected谢谢你提供的信息,facebook上的bug报告:我打开了这个bug,因为我有facebook团队快速解决问题的经验。携带bug的开发人员给我写了进一步的问题,似乎正在深入研究这个问题。希望一切都能很快得到解决!据我所知,他们修复了一个bug,这就是不会改变,正如他所写:我们修复了以前的一个错误,即auth.login将在每次页面加载时触发,而不仅仅是当状态从未知变为已连接时,即用户在使用你的应用程序时登录Facebook。auth.statusChange和auth.authResponseChange事件仍然像以前一样触发,你应该能够修改你的代码诚恳。所以基本上他建议像Breez解决方案一样解决这个问题……我遗漏了什么吗?事实上是的。我不知道你是否能看到回复,但他也写道:如果你设置状态:true,这会再次开始工作吗?这显然不起作用!所以我认为当他们修复错误时,他们不是我ant试图以他们的方式影响auth.login行为。可能他们只是导致了意外的附带问题。而且我甚至不知道问题是否与他们修复的bug有关。我的代码应该可以工作,因为这意味着只有当用户成功登录时才重新加载页面,而不是每次加载页面,但在当前状态下,它不会ork!如果用户已登录并获得授权,则不会触发auth.statusChange。我必须订阅auth.authResponseChange才能触发事件。感谢您提供的信息,facebook上报告了错误:我打开了错误,因为我有facebook团队快速解决问题的经验。携带错误的开发人员写道对我来说,更多的问题似乎正在深入研究这个问题。希望一切都能很快得到解决!据我所知,他们修复了一个bug,这不会改变,正如他所说:我们修复了以前的一个bug,在每次页面加载时都会触发auth.login,而不仅仅是当状态从未知变为已连接时,即用户登录时在使用你的应用程序时访问Facebook。auth.statusChange和auth.authResponseChange事件仍然像以前一样触发,你应该能够相应地修改你的代码。因此,基本上他建议像Breez解决方案一样解决这个问题……我遗漏了什么吗?事实上是的。不知道你是否能看到回复,但他也写道:正确吗假设如果您将status设置为true,这将再次开始工作?显然,这不起作用!因此我认为,当他们修复错误时,他们并不打算像以前那样影响auth.login行为。可能他们只是导致了意外的附带问题。而且我甚至不知道是否没有
这个问题与他们是否修复的bug有关。我的代码应该可以工作,因为这意味着只有当用户成功登录时才重新加载页面,而不是每次加载页面,但在当前状态下,它不工作!如果用户已登录并获得授权,则不会触发auth.statusChange。我必须订阅auth.authResponseChange才能触发事件。很好,我想这不需要Marco Gagliardi在回答中建议的PHP sdk检查,因为您使用JAVA sdk检查连接的用户。如果我没弄错的话。是的,没错,在我把它包装在getLoginStatusNice提示中之前,我一直在进行无限循环刷新,直到我发现这个问题。这是避免Internet Explorer中出现无限循环的一个很好的解决方案。在这个线程中,另一个解决方案是有帮助的。我认为无限循环是由错误的cookies引起的。。。很好,我想这不需要Marco Gagliardi在回答中建议的PHP sdk检查,因为您使用JAVA sdk检查连接的用户。如果我没弄错的话。是的,没错,在我把它包装在getLoginStatusNice提示中之前,我一直在进行无限循环刷新,直到我发现这个问题。这是避免Internet Explorer中出现无限循环的一个很好的解决方案。在这个线程中,另一个解决方案是有帮助的。我认为无限循环是由错误的cookies引起的。。。