Facebook登录按钮:我可以防止登录后自动页面重新加载


Facebook Login Button: Can I prevent auto page reload after login?

我正在尝试升级到3.1 SDK并遇到一些有问题的行为:当我通过我的网站上的FB登录按钮登录时,页面重新加载,尽管我在登录按钮的"onlogin"事件中定义了自己的JS方法。

因为页面立即重新加载,似乎我自己的"onlogin"脚本(检查FB用户并将其登录到我的网站)似乎被切断或不着火。导致用户无法登录站点。

另一个副作用是奇怪的:通过我的网站的FB按钮登录FB后,我将显示为在Facebook.com上登录,但几秒钟后,Facebook.com上会出现一个弹出框,说"未登录"。请登录继续(YES NO)。"

像往常一样,我在文档中找不到帮助,我真的被难住了。这是我的FB初始化:
<script>
window.fbAsyncInit = function() {
    FB.init({
        appId: '<?php echo cConfiguration::$facebookAppId;?>',
        cookie: true,
        xfbml: true,
        oauth: true
    });
    FB.Event.subscribe('auth.logout', function(response) {
        window.location = '/signout.php5';
    });
};
(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);
}());
</script>   

登录按钮为:

<fb:login-button length="long" autologoutlink="false" onlogin="fbLogin();"></fb:login-button>

EDIT我也试过这个按钮代码没有任何选项或"onlogin"事件,我得到相同的行为。

我的问题是:

  • 是否期望通过登录按钮登录后页面应该重新加载,即使没有订阅授权。登录事件在我的fbi .init?
  • 如果是这样,有没有办法覆盖这种行为?
  • 这里还有什么问题吗?

您为登出附加了一个事件处理程序,但没有为登录附加事件处理程序。添加这个。

FB.Event.subscribe('auth.login', function(response) {
return false;
});

虽然,防止重新加载可能不是您想要做的。相反,我发现有效的方法是检测用户是否点击了登录按钮。这个过程是。

    在页面加载(实际上在FB.init之后)facebook将自动登录。你应该处理这个登录,并通过ajax调用将用户登录到你的站点。登录成功后,设置一个JS变量,声明用户已经登录。
  1. 为登录按钮附加一个事件。一旦用户"点击"登录按钮,检查他们是否登录并刷新页面。

好了,我找到了看起来无法控制的页面重载的原因

由于某些原因,授权。每当我通过Facebook登录提示符登录时,都会触发logout事件。

所以我改变了这行:

FB.Event.subscribe('auth.logout', function(response) {
    window.location = '/signout.php5';
});

FB.Event.subscribe('auth.logout', function(response) {
    return false;
});

使用这个作为你的登录按钮,我相信一定有什么在你的fbLogin();参数,该参数正在重新加载页面。正常的行为是刷新按钮,页面刷新必须通过Event.subscribe强制执行。

<fb:login-button autologoutlink="false"></fb:login-button>