我有一個C#MVC項目。我試圖通過從Google獲取用戶信息來幫助用戶註冊過程。我想訪問名字,姓氏,電子郵件和手機號碼。所有都是必填字段。我相信我需要使用Google People API。 Google+ API工作正常,但沒有手機號碼。我不確定如何獲取這些數據。目前在startup.auth我:MVC外部登錄 - 使用Google People API
var googleOptions = new GoogleOAuth2AuthenticationOptions()
{
ClientId = ConfigurationManager.AppSettings["GoogleClientId"],
ClientSecret = ConfigurationManager.AppSettings["GoogleClientSecret"],
Provider = new GoogleOAuth2AuthenticationProvider
{
OnAuthenticated = context =>
{
context.Identity.AddClaim(new Claim("urn:google:accesstoken", context.AccessToken, ClaimValueTypes.String, "Google"));
context.Identity.AddClaim(new Claim(ClaimTypes.Email, context.Email));
context.Identity.AddClaim(new Claim(ClaimTypes.Uri, context.User["image"]["url"].ToString()));
return Task.FromResult(true);
}
}
};
googleOptions.Scope.Add("https://www.googleapis.com/auth/user.phonenumbers.read");
googleOptions.Scope.Add("https://www.googleapis.com/auth/userinfo.email");
googleOptions.Scope.Add("https://www.googleapis.com/auth/userinfo.profile");
app.UseGoogleAuthentication(googleOptions);
而在我的控制,我有:
if (loginInfo.Login.LoginProvider == "Google")
{
if (loginInfo.Email == null)
loginInfo.Email = GetSchemasClaimValue(loginInfo, "emailaddress");
firstName = GetSchemasClaimValue(loginInfo, "givenname");
lastName = GetSchemasClaimValue(loginInfo, "surname");
mobilePhone = loginInfo.ExternalIdentity.Claims.FirstOrDefault(c => c.Type == ClaimTypes.MobilePhone);
//proPic = GetSchemasClaimValue(loginInfo, "uri");
}
所有信息,除了根據需要手機訪問和工作。我只是不確定如何檢索這些數據。我希望它會在loginInfo中顯示爲Claim,但對於這種情況不存在任何索賠。系統會提示用戶授予應用程序訪問手機的權限,所以我有點困惑,爲什麼沒有聲明。請求是否需要添加到我的startup.auth中?這將如何工作?任何幫助,將不勝感激。
您好,我已經嘗試這種方法,但是我的JSON結果是這樣的: {{ 「種」: 「加#人」, 「ETAG」: 「\」 Sh4n9u6xxxNdphy12JkxmY \ 「」, 「電子郵件」:[{ 「值」: 「[email protected]」, 「類型」: 「賬號」 } ], 「的objectType」: 「人」 , 「ID」: 「114157772521111131101」, 「顯示名」: 「尼克車」, 「名」:{ 「familyName」: 「切」, 「給定名稱」: 「尼克」 }, 「圖像」:{ 「URL」: 「https://開頭XXX = 50」, 「ISDEFAULT」:假 }, 「isPlusUser」:假, 「語言」: 「EN」, 「verified」:false, 「domain」:「xxx」 }} 我找不到電話號碼 –
此答案是從[Google+ API](https://developers.google。com/+/web/api/rest/latest/people),這與[Google People API](https://developers.google.com/people/api/rest/)不同。 –
@NicolasChetty請參閱https://developers.google.com/people/api/rest/v1/people/get。看起來你需要在'personFields'中指定「phoneNumbers」,字段掩碼用於限制返回該人的哪些字段。 – ChunLin