Facebook FB.ui oauth对话框错误

时间:2011-09-30 18:59:04

标签: facebook fb.ui

我在制作一个对话框时遇到问题,要求用户登录我的Facebook标签进入比赛。

我们正在尝试使用带有以下代码的FB.ui oauth对话框。

FB.ui({
        client_id: '12345',
        method: 'oauth',
        scope: 'email,user_birthday',
        response_type: 'token',
        redirect_uri: "https://mydomain.com/test.php" // Change this to proper address
      });

当我们包含redirect_uri时,我们会收到以下消息

API Error Code: 100 API 
Error Description: Invalid parameter 
Error Message: The "redirect_uri" parameter cannot be used in conjunction 
    with the "next" parameter, which is deprecated.

我们没有在任何地方使用下一个参数,所以不确定为什么会这么说。

当我们带走redirect_uri时,我们会收到以下消息。

API Error Code: 191 API 
Error Description: The specified URL is not owned by the application 
Error Message: redirect_uri is not owned by the application.

4 个答案:

答案 0 :(得分:2)

我会使用FB.login方法而不是这个,因为你在标签应用程序中运行。

在你的FB.init中:

window.fbAsyncInit = function(){
        FB.init({
            appId: 'your_app_id', 
            status: true, 
            cookie: true,
            xfbml: true,
            oauth: true
        });
        FB.Canvas.setAutoGrow(true);
    };

FB.getLoginStatus(function(response){
        if(response.status == 'connected'){
            callyourfunctiontoentercompetition();
        }else{
            FB.login(function(response){
                if(response.status == 'connected'){
                    callyourfunctiontoentercompetition();
                }else{
                   handlethecancelpermissions();
                }
            });
        }
    });

答案 1 :(得分:1)

原来有一些问题,在我的应用设置中,我必须选择“网站”并放入我网站的网址,这样我就可以添加“应用域”并保存。这清除了191错误。未检查App Domain的网站将无法保存。之后它很简单。

这是我使用的代码。

<script>
  window.fbAsyncInit = function() {
   FB.init({
    appId  : 'YOUR_ID',
    status : true, // check login status
    cookie : true, // enable cookies to allow the server to access the session
    xfbml  : true, // parse XFBML
    channelURL : 'http://www.your_domain.ca/channel.html', // channel.html file
    oauth  : true // enable OAuth 2.0
  });
   // This should be fired on a user initiated action

     FB.ui({ method: 'oauth', perms: 'email' }, function() { callback() });
  };
  (function(d){
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     d.getElementsByTagName('head')[0].appendChild(js);
   }(document));

  function callback() { 

  FB.getLoginStatus(function(response) {
  if (response.authResponse) {
    FB.api('/me', function(response) {
      //Get user information from here
    });
  }  
    });
  }


</script>

答案 2 :(得分:0)

确保您所做的请求来自与您在facebook api中注册的域名相同的域名

答案 3 :(得分:0)

在标签中,您不需要传递方法和烫发以外的任何参数(或Facebook更改时的范围)

FB.getLoginStatus(function(response){
        if(response.status == 'connected'){
alert("User connected");
        }else{
FB.ui({
        method: 'oauth',
        perms: 'email,user_birthday' //change perms to scope when Facebook supports it
      }, function(response){
if(response.session){
alert("User connected");
}else if(response.installed != '1'){
alert("User canceled");
}
});
}
}
)