0

这个 API 完全是新的我正在一个使用 Facebook API 允许他们登录的网站上工作。代码很旧,现在不起作用,所以我正在尝试升级以使用新的 SDK。我正确地让他们使用这个登录:

<div id="fb-root"></div>
<script>
window.fbAsyncInit = function () {
    FB.init({
        appId: '<%= System.Configuration.ConfigurationManager.AppSettings["ApiID"] %>', // App ID
        channelUrl: 'http://<%= Request.ServerVariables["SERVER_NAME"] %>/channel.html', // Channel File
        status: true, // check login status
        cookie: true, // enable cookies to allow the server to access the session
        xfbml: true  // parse XFBML
    });

    // Additional initialization code here
};

// Load the SDK Asynchronously
(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));
</script>

这个链接:

<strong><a href="#" class="sIcoFB" onclick="FB.login(function(response) { if (response.authResponse) { scope: 'publish_stream,email'; parent.location = '<%=Server.UrlDecode(redirectPath)%>'; } else { alert('Please sign in to access the site'); } });">Login using Facebook</a></strong> &nbsp;&nbsp;  

这似乎可行,因为您可以打开 facebook.com 并且您已正确登录。但是我似乎找不到如何在 C# 中检查它。到目前为止我有这个:

//Facebook Authenticated, created session and API object
_connectSession = new FacebookClient();

//example of getting access code
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("client_id", System.Configuration.ConfigurationManager.AppSettings["ApiID"]);
parameters.Add("redirect_uri", Request.Url.AbsoluteUri);
parameters.Add("client_secret", System.Configuration.ConfigurationManager.AppSettings["Secret"]);
parameters.Add("scope", "publish_stream,email");

IDictionary<string, object> result = (IDictionary<string, object>)_connectSession.Get("/oauth/access_token", parameters);

string accessToken = (string)result["access_token"];

但是我收到此错误:

(OAuthException - #1) 缺少授权码

如果有人能指出我如何在 C# 中获取配置文件信息的方向,因为我们的数据库中已经有了 ID,我只需将他们作为我们的用户之一登录。

4

2 回答 2

0

您缺少code获取 access_token 所需的参数 - 异常似乎是正确的。检查身份验证文档中的服务器端流程

您可能只需要包含code当用户从身份验证对话框被重定向回您的应用程序时收到的参数 - 您调用中的其他参数以获取访问令牌看起来正确

于 2012-10-03T18:29:50.887 回答
0

我在下面有这个测试页面,它是直接来自 Facebook 开发人员的代码。假设提示您登录,然后将您的图片和姓名放入元素中。虽然它使您正确登录,但它不会更新。

** 更新代码,现在可以使用*

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testfb.aspx.cs" Inherits="testfb" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<head id="Head1" runat="server">
    <title></title>    
    <script type="text/javascript" src="/js/jquery-1.6.1.min.js" charset="utf-8">    </script>        
    <script src="/js/jquery-ui-1.8.custom.min.js" type="text/javascript"></script>        
</head>
<body>                    
   <div id="fb-root"></div>
  <script>
      window.fbAsyncInit = function () {
          FB.init({
              appId: '111081862265698', // App ID
              channelUrl: '//<%= Request.ServerVariables["SERVER_NAME"] %>/channel.html', //     Channel File
              status: true, // check login status
              cookie: true, // enable cookies to allow the server to access the session
              xfbml: true  // parse XFBML
          });
          FB.login(function (response) {
              if (response.authResponse) {
                  alert('Welcome!  Fetching your information.... ');
                  FB.api('/me', function (response) {
                      alert('Good to see you, ' + response.name + '.');
                      var image = document.getElementById('image');
                      image.src = 'http://graph.facebook.com/' + response.id + '/picture';
                      var name = document.getElementById('name');
                      name.innerHTML = response.name
                  });
              } else {
                  alert('User cancelled login or did not fully authorize.');
              }
          });         
      };
      // Load the SDK Asynchronously
      (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));
  </script>

  <div align="center">
    <img id="image"/>
    <div id="name"></div>
  </div>
  <div class="fb-login-button" scope="email">
    Login with Facebook
  </div>

</body>
</html>
于 2012-10-04T19:00:44.843 回答