ASP.NET MVC 5.1 C#OWIN facebook身份validation或登录请求生日,喜欢,公开个人资料,电话号码

我看过很多关于facebook身份validation的post,要么是旧的,要么是不正常的。

然而,最后我在我的项目中做了一些有效但不完全的东西。 这是我要求的代码

var facebookAuthenticationOptions = new FacebookAuthenticationOptions() { AppId = "...ID", AppSecret = "...AppSecret", AuthenticationType = "Facebook", SignInAsAuthenticationType = "ExternalCookie", //Provider = new FacebookAuthenticationProvider //{ // OnAuthenticated = async ctx => // { // if (ctx.User["birthday"] != null) // { // ctx.Identity.AddClaim(new Claim(ClaimTypes.DateOfBirth,ctx.User["birthday"].ToString())); // } // } //} }; facebookAuthenticationOptions.Scope.Add("user_birthday"); //facebookAuthenticationOptions.Scope.Add("first_name"); //facebookAuthenticationOptions.Scope.Add("last_name"); //page goes blank if ask for first_name,last_name , if comment out works //but doesn give date of birth or likes or other things. facebookAuthenticationOptions.Scope.Add("publish_stream"); facebookAuthenticationOptions.Scope.Add("user_likes"); facebookAuthenticationOptions.Scope.Add("friends_likes"); facebookAuthenticationOptions.Scope.Add("read_stream"); facebookAuthenticationOptions.Scope.Add("email"); app.UseFacebookAuthentication(facebookAuthenticationOptions); 

我从返回结果中得到了什么。

任何人都可以请帮助我为什么我没有得到朋友,生日,user_likes等。

另外,如何获取这些字符串值(即“user_birthday”,“first_name”)进行信息检索,比如我怎么知道“user_birthday”返回生日的日期(我是从搜索中得到的),是否有任何列表有这个字符串名称(即“user_birthday”,“first_name”)?

如果我使用谷歌身份validation,是否可以获得电话号码或名字,姓氏?

解决了它,参考文献: https : //developers.facebook.com/docs/facebook-login/permissions/v2.1#reference

  var facebookAuthenticationOptions = new FacebookAuthenticationOptions() { AppId = ".....", AppSecret = ".....", AuthenticationType = "Facebook", SignInAsAuthenticationType = "ExternalCookie", Provider = new FacebookAuthenticationProvider { OnAuthenticated = async ctx => { ctx.Identity.AddClaim(new Claim(ClaimTypes.DateOfBirth, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.Country, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.Gender, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.MobilePhone, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.OtherPhone, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.HomePhone, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.StateOrProvince, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.Email, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.Country, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.Actor, ctx.User["birthday"].ToString())); ctx.Identity.AddClaim(new Claim(ClaimTypes.DateOfBirth, ctx.User["birthday"].ToString())); } } }; facebookAuthenticationOptions.Scope.Add("user_birthday"); //facebookAuthenticationOptions.Scope.Add("first_name"); //facebookAuthenticationOptions.Scope.Add("last_name"); facebookAuthenticationOptions.Scope.Add("publish_stream"); facebookAuthenticationOptions.Scope.Add("user_likes"); facebookAuthenticationOptions.Scope.Add("friends_likes"); facebookAuthenticationOptions.Scope.Add("user_about_me"); facebookAuthenticationOptions.Scope.Add("user_friends"); facebookAuthenticationOptions.Scope.Add("user_actions.news"); facebookAuthenticationOptions.Scope.Add("user_actions.video"); facebookAuthenticationOptions.Scope.Add("user_education_history"); facebookAuthenticationOptions.Scope.Add("manage_pages"); facebookAuthenticationOptions.Scope.Add("user_interests"); facebookAuthenticationOptions.Scope.Add("user_location"); facebookAuthenticationOptions.Scope.Add("user_photos"); facebookAuthenticationOptions.Scope.Add("user_relationships"); facebookAuthenticationOptions.Scope.Add("user_relationship_details"); facebookAuthenticationOptions.Scope.Add("user_status"); facebookAuthenticationOptions.Scope.Add("user_tagged_places"); facebookAuthenticationOptions.Scope.Add("user_videos"); facebookAuthenticationOptions.Scope.Add("user_website"); facebookAuthenticationOptions.Scope.Add("read_friendlists"); facebookAuthenticationOptions.Scope.Add("read_stream"); facebookAuthenticationOptions.Scope.Add("email"); app.UseFacebookAuthentication(facebookAuthenticationOptions); 

ctx获得了所有信息..只需要经历它。

仍然没有关于如何获得谷歌的第一个,姓氏和电话号码+出生日期的信息。 或者如何从Gmail帐户访问用户联系人。

您可以循环上下文。用户获取所有声明

  var facebookAuthOptions = new FacebookAuthenticationOptions(); facebookAuthOptions.AppId = "..."; //Enter your AppId facebookAuthOptions.AppSecret = "..."; //Enter your AppSecret facebookAuthOptions.Provider = new FacebookAuthenticationProvider() { OnAuthenticated = async context => { context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccessToken", context.AccessToken)); foreach (var claim in context.User) { var claimType = string.Format("urn:facebook:{0}", claim.Key); string claimValue = claim.Value.ToString(); if (!context.Identity.HasClaim(claimType, claimValue)) context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Facebook")); } } }; 

谷歌也是如此

  var googleAuthOptions = new GoogleOAuth2AuthenticationOptions(); googleAuthOptions.ClientId = "..."; //Enter your ClientId googleAuthOptions.ClientSecret = "..."; //Enter your ClientSecret googleAuthOptions.Provider = new GoogleOAuth2AuthenticationProvider() { OnAuthenticated = async context => { context.Identity.AddClaim(new System.Security.Claims.Claim("GoogleAccessToken", context.AccessToken)); foreach (var claim in context.User) { var claimType = string.Format("urn:google:{0}", claim.Key); string claimValue = claim.Value.ToString(); if (!context.Identity.HasClaim(claimType, claimValue)) context.Identity.AddClaim(new System.Security.Claims.Claim(claimType, claimValue, "XmlSchemaString", "Google")); } } }; 

我认为用户的隐私设置和您的应用程序权限控制着您可以获得的声明。