Facebook Connect登录按钮无法呈现

时间:2010-03-31 00:15:26

标签: asp.net javascript ajax facebook

我正在尝试实施Facebook Connect单点登录网站。我最初只有一个Connect按钮(<fb:login-button>),用户每次要登录时都必须单击该按钮。我现在可以使用自动登录和注销功能。也就是说,我的网站将检测登录的Facebook帐户,如果它可以找到我的网站的一个用户帐户匹配,则自动验证它们,如果Facebook会话丢失,则自动取消验证。我还有一个手动注销按钮,可以将用户从我的网站和Facebook中注销。所有这些都正常工作,但现在我的原始Connect按钮间歇性地无法正确呈现。它只是显示为普通的XHTML(即,它看起来像纯文本 - 不是按钮 - 并且是不可点击的),并且没有应用XFBML。这是基本代码:

在每一页上:

<body>
{...}
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

<script type="text/javascript>
FB.init('APIKey', '/xd_receiver.htm');

var isAuth; // isAuth determines if the user is authenticated on my site
            // it should be true on the logout page, false on the login page
FB.ensureInit(function(){ 
    var session = FB.Facebook.apiClient.get_session();
    if (session && !isAuth) {
        PageMethods.FacebookLogin(session.uid, session.session_key, FBLogin, FBLoginFail);
        // This is an AJAX call that authenticates the user on my site. 
    } else if(!session && isFBAuth) {
        PageMethods.FacebookLogout(FBLogout, FBLogoutFail);
        // This is an AJAX call that deauthenticates the user on my site.
    }
    // the callback functions do nothing at the moment
});
</script>

{...}
</body>

在登录页面上:(登录用户无法看到此页面)

<body>
{...}
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

<script type="text/javascript>
    FB.init('APIKey', '/xd_receiver.htm');
    {...} // auto-auth code as on every page
</script>

<!-- This is the button that fails to render -->
<fb:login-button v="2" onlogin="UserSignedIntoFB();" size="large" autologoutlink="true"><fb:intl>Login With Your Facebook Account</fb:intl></fb:login-button>

<script type="text/javascript">
    function UserSignedIntoFB() {
        {...} // posts back to the server which authenticates the user on my site & redirects
    }
</script>
{...}
</body>      

在退出页面上:(此页面对于已注销的用户不可见)

<body>
{...}
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>

<script type="text/javascript>
    FB.init('APIKey', '/xd_receiver.htm');
    {...} // auto-auth code as on every page
</script>

<script type="text/javascript">
    function FBLoggedOut() {
        {...} // posts back to the server which deauthenticates the user on my site & redirects to login
    }

    function Logout() {
        if (FB.Facebook.apiClient.get_session()) {
            FB.Connect.logout(FBLoggedOut); // logs out of Facebook if it's a Facebook account
            return false;
        } else {
            return true; // posts back if it's a non-Facebook account & redirects to login
        }
    }
</script>
<a onclick="return Logout();" href="postback_url">Sign Out</a>
{...}
</body>

我已经看过一些事情:

  • 自动登录和注销工作正常。我可以在另一个标签上登录和退出Facebook,我的网站会注意到会话的变化并相应地更新。
  • 注销似乎工作正常:点击后,它会取消验证用户并按照预期将其从Facebook中注销。
  • 问题似乎通常在Facebook用户注销后发生,但它有点间歇性地发生;它可能会在他们登录之前发生,并且在几分钟/刷新后消失。
  • 在登录/注销过程后遗留了一些cookie,但删除它们并不能解决问题。
  • 重新启动浏览器无法解决问题。
  • 当问题发生时,用户肯定会退出Facebook和我的网站。我检查了Facebook会话和站点身份验证。
  • 正在正确提供所有外部脚本调用。
  • 编辑:此外,当登录按钮 渲染时,它可以正常工作。

我怀疑在注销时我需要做些什么(比如清除会话或cookie),但根据我所读到的关于Facebook Connect的所有内容,我需要做的就是调用注销功能(和在我的服务器端取消验证)。我真的很茫然;有没有人有任何想法可能出错?

1 个答案:

答案 0 :(得分:6)

确保在页面的非常结束处调用facebook js include(FeatureLoader),这样你的页面呈现然后facebook JS在将文本转换为按钮之后做了一些魔术。否则,这是在调用fb的服务器和在浏览器中加载你的网站内容之间的竞赛......

至少那是我遇到的问题。