c# - c# - People API 不返回电子邮件地址
问题描述
我正在尝试获取登录用户的电子邮件地址和姓名。我可以看到用户的姓名,但电子邮件地址显示为空。这是我为检索这两个值而编写的代码:
using Google.Apis.Auth.OAuth2;
using Google.Apis.People.v1;
using System.Net;
using System.Threading;
using Google.Apis.Services;
using Google.Apis.People.v1.Data;
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "jfms2vr52dm9eghchabasa5.apps.googleusercontent.com",
ClientSecret = "xxxxxxxxxxxx"
},
new[] { "profile", "https://www.googleapis.com/auth/contacts.readonly", "https://www.googleapis.com/auth/user.birthday.read", "https://www.googleapis.com/auth/userinfo.email" },
"me",
CancellationToken.None).Result;
// Create the service.
var service = new PeopleService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "M_Test1",
});
PeopleResource.GetRequest peopleRequest = service.People.Get("people/me");
peopleRequest.RequestMaskIncludeField = "person.names,person.emailAddresses,person.birthdays";
Person profile = peopleRequest.Execute();
解决方案
看起来你已经改变了你的范围。为了查看电子邮件地址,用户必须授予您对电子邮件范围的访问权限。登录用户的凭据信息存储在 %appdata% 中,名称为me,即您在下面的代码中给它的名称。
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = "jfms2vr52dm9eghchabasa5.apps.googleusercontent.com",
ClientSecret = "xxxxxxxxxxxx"
},
new[] { "profile", "https://www.googleapis.com/auth/contacts.readonly", "https://www.googleapis.com/auth/user.birthday.read", "https://www.googleapis.com/auth/userinfo.email" },
"me", // change this to reset login
CancellationToken.None).Result;
这只是一个表示用户的字符串。您可以将其更改为其他任何内容,它会提示您再次登录。或者您可以删除 %appdata% 中的文件
推荐阅读
- python - Django REST:get_queryset 提供重复响应
- php - 如何使用 php 代码在 WHM/Cpanel 中以编程方式创建数据库?
- c - C中原始类型的位
- neural-network - 如何使用进化算法创建适当的前馈神经网络
- c# - 如果抛出异常,.Net Web API 有时根本不返回任何响应
- powershell - 使用 Search-ADAccount 查找所有未设置帐户到期日期的帐户
- c++ - 在 C++ 中实现地图矢量
- angular7 - 存储哪个树节点是展开 mat-tree 嵌套的?
- excel - 如何计算范围参数中的项目数?
- excel - 从Excel中一系列单元格中以逗号分隔的一组数字中计算特定数字