Facebook登录按钮:我可以在登录后阻止自动页面重新加载吗?

时间:2011-08-25 21:59:59

标签: php facebook facebook-javascript-sdk facebook-php-sdk facebook-authentication

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

因为页面立即重新加载,看来我自己的“onlogin”脚本(检查FB用户并将其记录到我的网站中)似乎被切断或不会触发。因此,用户无法登录该站点。

另一个副作用很奇怪:登录FB vi我的网站的FB按钮后,我将显示为登录Facebook.com,但几秒钟后,Facebook.com会出现一个弹出窗口,显示“不是登录。请登录继续(是否)。“

像往常一样,我无法在文档中找到帮助,而且我真的很难过。这是我的FB init:

<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>

编辑我也试过这个没有任何选项或“onlogin”事件的按钮代码,我也得到了同样的行为。

所以我的问题:

  • 是否应该在通过登录按钮登录后重新加载页面,即使还没有在我的FB.init中订阅auth.login事件?
  • 如果是,有没有办法覆盖这种行为?
  • 这里有什么不对吗?

3 个答案:

答案 0 :(得分:1)

您已为登出附加了事件处理程序,但未附加登录。加上这个。

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

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

  1. 在页面加载(实际上在FB.init之后)facebook将自动登录。
  2. 您应该处理此登录并通过ajax调用将用户登录到您的站点。在此登录成功后,设置一个JS变量,指出用户已登录。
  3. 将事件附加到登录按钮。用户“点击”登录按钮后,检查他们是否已登录并刷新页面。

答案 1 :(得分:1)

好的,我发现了看似无法控制的页面重新加载的原因

出于某种原因,只要我通过Facebook登录提示登录,就会触发 auth.logout 事件。

所以我改变了这一行:

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

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

答案 2 :(得分:0)

使用此作为您的登录按钮,我相信您的fbLogin()必须有一些东西;正在重新加载页面的param。正常行为只是刷新按钮,必须使用Event.subscribe强制页面刷新。

<fb:login-button autologoutlink="false"></fb:login-button>
相关问题