如何使用登录按钮登录Facebook?

时间:2013-09-05 03:06:16

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

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

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(都描述为here)都没有。下次用户按下按钮,或者如果他们已经登录到Facebook,对话框会弹出并立即消失。 (奇怪的是,回调确实发生在我自己的Facebook帐户上,可能是因为我之前已经对该应用进行了身份验证。)

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

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

但这也不会触发登录回调(虽然它确实记录了用户)。

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

1 个答案:

答案 0 :(得分:0)

原来这些登录方式都没问题,我只是忘了在developers.facebook.com的应用程序设置中禁用“沙盒模式”:

  

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

糟糕。