0

我在我的演示站点中使用 fb 登录连接:我使用了以下代码:

  window.fbAsyncInit = function() {
      try{
        FB.init({
            apiKey: '<MY APP KEY>',
            channelUrl : 'www.google.com'
        });

        FB.getLoginStatus(function(response){
            loginHandler(); 
        });
      }catch(error){}
  };  
    function loginHandler(success,fail)
    {

        try{
            if(success){
                alert('i am if');
                FB.api('/me', function(response,fail) {
                    alert("first name == " + response.first_name + "\n ln === " + response.last_name);
                });
            }
        }catch(error){}
    }

    $('#login').bind('click', function(response) {
        try{
            FB.login(loginHandler, {scope: 'email,user_likes'});
        }catch(error){}
    });

    $('#logout').bind('click', function() {
        try{
            FB.logout(function(response){});
        }catch(error){}
      });

现在我的问题是alert('i am if'); 每次都显示我是否将正确的凭据传递给facebookalert("first name == " + response.first_name + "\n ln === " + response.last_name); 当用户传递错误凭据时显示未定义,当用户返回传递正确信息时显示正确信息

一种可能的选择是检查,if(response.first_name!=undefined){blah blah....}但它是检查身份验证的正确方法吗?

请阐明一些光......

4

2 回答 2

1

FB.login并且FB.api不会像您尝试实施它那样为您提供成功/失败报告。回调没有第二个参数......

FB.login回调得到一个也是唯一的参数:

来自FB.getLoginStatusFB.login的回应 FB.logout此响应对象包含:

status
用户的状态。已连接、未授权或未知之一。
authResponse
authResponse 对象。

FB.api回调获取一个也是唯一一个来自 Graph API 的响应的参数,通常(但不总是)包含data属性、对象字段、布尔值 false 或error对象(带有messagetypecode属性)


您可以loginHandler通过更正响应回调来修改您的以处理正确的参数:

function loginHandler(loginResponse){
  try{
    if(loginResponse.authResponse){
      alert('i am if');
      FB.api('/me', function(response) {
        alert("first name == " + response.first_name +
              "\n ln === " + response.last_name);
      });
    }
  }catch(error){}
}
于 2012-04-30T11:20:55.583 回答
1

尝试这样的事情:

//用于登录
    $("#login").bind("点击", function(e) {     
        var fbScope = "email,user_likes";
        FB.登录(功能(响应){          
           if(response.status == "已连接"){
               console.log("登录");
           }
        },{范围:fbScope});
    });
    //用于检查登录状态
    FB.getLoginStatus(函数(响应){
        如果(response.authResponse){    
            var accessToken = response.authResponse.accessToken;
            FB.api('/me', function(response) {
                console.log('我还在登录');
            });         
        }
    });
    //用于注销
    $("#logout").live("点击", function(e) {        
        FB.getLoginStatus(函数(响应){           
            if(response.status == "已连接"){
                FB.注销(功能(响应){
                    console.log("我现在登出");                  
                });
           } 别的 {
                console.log("未登录");
           }
        });
    });
于 2012-04-30T11:23:16.343 回答