如何使用Webmatrix beta 2 refresh oaythwebsecurity从oauth / openID提供商e,g facebook请求额外的用户数据,如电子邮件,个人资料图片?

时间:2012-05-12 20:32:51

标签: webmatrix

我似乎无法绕过使用webmatrix beta 2中引入的oauthwebsecurity在facebook和gmail中请求和检索额外数据(如个人资料图片和电子邮件)的可能性。默认情况下,gmail和yahoo返回除facebook以外的电子邮件。其中没有人返回用户的image.pls,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

首先,如果您使用的是Visual Studio 2012,那么在构建您的网站时,内置了用于处理Facebook OAuth的参考架构。它广泛建议通过Nuget添加Facebook C#SDK以启用对FacebookClient的调用。

了解第一次调用Facebook Oauth获取反馈时,它只能回馈以下变量:

  • id(可以是电子邮件或手机)
  • name(用户的全名)
  • 链接(链接到他们在Facebook上的个人资料页面)
  • 性别(男性或女性......这里的选择很少)
  • 访问令牌

获得访问令牌后,您可以使用它来调用其他变量。要查看您可以通过Facebook客户端访问的内容,请查看https://developers.facebook.com/docs/reference/api/user/以获取各种变量的完整列表。 (Noob警告:我仍然没有弄清楚如何调用所有这些,但重要的一点很容易。)

Scott MitzFacken提供了一个关于在MVC网站中使用OAuth提供程序的优秀教程,除了最重要的步骤之外,他还将指导您完成每个步骤:使用访问令牌将Extradata取出,然后将其添加到数据库中。按照他的教程,直到你将这段代码添加到ExternalLoginCallback方法:

 if (result.ExtraData.Keys.Contains("accesstoken"))
{
    Session["facebooktoken"] = result.ExtraData["accesstoken"];
}

好的,所以你用正确的方法获得了访问令牌。现在从Facebook获取数据并进入您的应用程序。我在检查后修改了ExternalLoginConfirmation方法以查看用户是否已经存在:

 // Check if user already exists
 if (user == null) {

     var client = new Facebook.FacebookClient(Session["facebooktoken"].ToString());
     dynamic response = client.Get("me", new {
         fields = "first_name, last_name, email"
     });
     model.FirstName = response["first_name"];
     model.LastName = response["last_name"];
     model.EmailAddy = response["email"];


     // Insert name into the profile table
     db.UserProfiles.Add(new UserProfile {
         UserName = model.UserName, FullName = model.FullName, Gender = model.Gender, FirstName = model.FirstName, LastName = model.LastName, EmailAddy = model.EmailAddy
     });
     db.SaveChanges();
  1. 这假设您已将Facebook C#SDK应用于您的项目。
  2. Facebook字段在逗号分隔的一组“”中被请求。
  3. 在我的示例中,model.XXX引用用户配置文件字段。
  4. 然后我将用户个人资料字段转换为回复[“XXX”]字符串。
  5. 保存用户个人资料记录后,由于Facebook Oauth客户端,还会保存其他字段。
  6. 我不确定你是否还需要这个答案...希望不是。对于像我一样花了一整天努力做到这一点的人,我希望这个答案可以解释这个问题

    干杯,祝你好运!