我正在Asp.Net网站上尝试外部登录(Oauth + Owin)。我可以在登录期间检索谷歌用户的名字,姓氏,电子邮件,性别等数据。但我无法检索用户的国家/地区,电话号码。
代码:Startup.Auth.cs 这增加了所有索赔
var googleOptions = new GoogleOAuth2AuthenticationOptions()
{
ClientId = "************com",
ClientSecret = "***********",
Provider = new GoogleOAuth2AuthenticationProvider()
{
OnAuthenticated = (context) =>
{
foreach (var claim in context.User)
{
var claimType = string.Format("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/{0}", claim.Key);
string claimValue = claim.Value.ToString();
context.Identity.AddClaim(new Claim(claimType, claimValue, "http://www.w3.org/2001/XMLSchema#string"));
}
return Task.FromResult(0);
}
}
};
app.UseGoogleAuthentication(googleOptions);
AccountsController:
if (loginInfo.Login.LoginProvider == "Google")
{
var externalIdentity = AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
var emailClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email);
var lastNameClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Surname);
var givenNameClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName);
var addressClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.StreetAddress);
var countryClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Country);
var stateClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.StateOrProvince);
var postalClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.PostalCode);
var phoneClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.MobilePhone);
var genderClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Gender);
var email = emailClaim.Value;
var firstName = givenNameClaim.Value;
var lastname = lastNameClaim.Value;
var gender = genderClaim.Value;
//var phone = phoneClaim.Value;
}
我可以获取电子邮件,名字,姓氏,性别。但电话号码为空,因为它没有返回。 有没有办法从谷歌检索电话号码,州,国家等数据?
提前致谢
答案 0 :(得分:0)
如果用户未输入电话号码或未添加国家/地区,则无法返回此数据,因为谷歌没有。
如果您使用Try It对其进行测试。具有所有不同的范围
https://www.googleapis.com/auth/plus.login了解您的基本资料 信息和圈子中的人员列表。
https://www.googleapis.com/auth/plus.me了解您在Google上的身份 https://www.googleapis.com/auth/userinfo.email查看您的电子邮件地址 https://www.googleapis.com/auth/userinfo.profile查看基本内容 有关您帐户的信息
如果用户未将相关信息设置为 PUBLIC ,那么您也将无法看到它。即使您正在检查经过身份验证的用户的数据也是如此,如果它不公开,您无法从API中看到它。