0

我的应用程序有一个 Facebook 登录按钮 ( <fb:login-button>),该按钮将用户登录到 Facebook 并验证他们对我的应用程序的使用。这是我的代码(login()logout()分别为登录和注销准备页面布局)。有关此代码背后的原因,请参阅此答案。

window.fbAsyncInit = function() {
   FB.init({
        appId: myAppID,
        channelUrl: window.location.protocol + '//' 
            + window.location.host + '/channel.html',
        status: false,
        cookie: true,
        xfbml: false,
        oauth: true
    });

    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {
            login(response);
        } else {
            FB.Event.subscribe('auth.login', function(response) {
                login(response);
            });
            logout();
        }
    });
}

(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));

问题:新用户获得 Oauth 对话框并可以登录 Facebook,但auth.login不会为他们触发。auth.authResponseChangeauth.statusChange(都在这里描述)。下次用户按下按钮时,或者如果他们已经登录 Facebook,对话框会弹出并立即消失。(奇怪的是,在我自己的 Facebook 帐户中,回调确实会按预期发生,可能是因为我之前已经对应用程序进行了身份验证。)

作为一种解决方法,我尝试FB.login()将登录按钮作为手动 onclick 事件触发(请原谅使用内联 Javascript):

<fb:login-button onclick="FB.login(function(r){if(r.authResponse)login(r)})">

但这也不会触发登录回调(尽管它确实会登录用户)。

使用登录按钮登录 Facebook 的正确方法是什么?

4

1 回答 1

0

事实证明,这些登录方式中的任何一种都很好,我只是忘记在 developer.facebook.com 上的应用程序设置中禁用“沙盒模式”:

“如果启用,只有应用开发者才能使用应用。”

哎呀。

于 2013-09-06T20:58:14.143 回答