使用Facebook进行ASP.NET网站身份验证

5

我看过很多有关ASP .NET网站与Facebook集成的文档,但即使使用Facebook C# SDK,我也没有找到一个简单的可行的例子。

我只想要一个“使用Facebook登录”的示例,并获取基本的用户信息(例如姓名,电子邮件和照片)。

你们能帮我吗?

非常感谢!


1
尽管这似乎是一些重复的基本问题,但它非常真实。即使在我开发某些东西时,我也找不到任何体面的例子,并且在几篇博客文章中看到了各种不同的代码。 - gideon
1个回答

9

根据您的要求,使用Facebook C# SDK,下面是Canvas应用程序的路径和一些代码:

1- 从Visual Studio创建您的Web应用程序
2- 安装NuGet并通过NuGet获取Facebook C# SDK
3- 从https://developers.facebook.com/apps/创建和配置您的应用程序。
4- 您的Web配置用于Facebook集成:

<configuration>
  <configSections>
    <section name="facebookSettings" type="Facebook.FacebookConfigurationSection" />
  </configSections>
  <facebookSettings appId="123..." appSecret="abc...." siteUrl="http://apps.facebook.com/myapp/" canvasPage="http://app.facebook.com/myapp" secureCanvasUrl="https://myapp.com/" canvasUrl="http://myapp.com/" cancelUrlPath="http://www.facebook.com/" />
...

通过使用SDK,您可以解析由Facebook JS SDK编写的已签名请求或cookie。
FacebookWebContext fbWebContext = new FacebookWebContext();
//Check if user auhtenticated
bool IsAuthenticated = fbWebContext.IsAuthenticated(); 

您可以通过以下方法获得好友数量:

FacebookWebClient fbWebClient = new FacebookWebClient();
dynamic result = fbWebClient.Get("me/friends");
var friends = result["data"];
int frienCount = friends.Count;

对于客户端:

<body> 
<div id="fb-root"></div>
<script>

window.fbAsyncInit = function () {
    FB.init({ 
    appId: '123...', 
    status: true, 
    cookie: true, 
    xfbml: true, 
    oauth:true  });
};
(function () {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);            
} ());

<!-- rest of your html -->

</body>

登录和向JavaScript请求权限

    FB.getLoginStatus(function(response) {
        console.log( response );
        if ((response.status)&&(response.status=='connected')) {
            //successs
        } else {
            //user declined 
           }, {scope:'user_likes, offline_access'}

    });

在我的项目中,我更喜欢客户端登录,因此未注册的用户将有一个着陆页面。例如,如果提交表单,则调用上面的代码块。

注意:您必须为Internet Explorer设置P3P标头,以根据您的服务器读取/写入cookie。对于IIS,使用global.asax

protected void Application_BeginRequest(Object sender, EventArgs e)
{

    HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\"");

}

Volià


@asdf_enel_hak 我找不到FacebookWebContext。 - Heemanshu Bhalla
@asdf_enel_hak 也找不到 FacebookWebClient。 - Heemanshu Bhalla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接