Gmail NodeJs客户端中的Gmail API userId用例?

Posted

技术标签:

【中文标题】Gmail NodeJs客户端中的Gmail API userId用例?【英文标题】:Gmail API userId use cases in Gmail NodeJs client? 【发布时间】:2021-12-24 11:47:23 【问题描述】:

在使用特殊值“我”的情况之外,如何使用 userId 属性?

据我了解,当您使用“我”时,是指您已作为最终用户进行身份验证。

但是当您没有作为最终用户进行身份验证时,您不能使用“me”,也不能使用任何其他值,因为您没有执行给定请求的权限。

我试图了解如何在不使用 userId 字段中的值“me”的情况下代表经过身份验证的用户在我的应用上执行操作?

使用 Gmail nodeJs 客户端的示例:

const googleClient = new google.auth.OAuth2(client_id, client_secret, redirect_uri);

async function getUnreadEmailsFrom(userID) 
let gmail = google.gmail( version: 'v1', auth: googleClient );

/* Here on the line below, I'd like to use the email or ID of an already authenticated user in order to perform a given action.

But the only way I understand that I am able to perform any action is by loading the token of the user and saving it via 
googleClient.setCredentials(userToken)
and then using the special value 'me' inside the userId propery.
*/
let response = await gmail.users.messages.list(userId: 'me', q: 'is:unread', maxResults: 500 );

return response.data;
 

【问题讨论】:

你应该给出代码示例。 我刚刚添加了一个示例。谢谢。 您好,this 回答您的问题了吗?如果是这种情况,请考虑接受***.com/help/someone-answers。 【参考方案1】:

简答:

userId 的唯一允许值是 me 和经过身份验证(或模拟)的用户电子邮件地址。

说明:

访问其他用户数据的唯一方法是 grant domain-wide authority to a service account 并使用它来模拟您要访问其数据的目标用户(该用户应该在同一个域中)。

不过,目标用户电子邮件在模拟时指定(请参阅Preparing to make an authorized API call),即在调用 API 之前。

稍后,在调用 API 时,特殊值 me 将对应于模拟用户,并且唯一接受的值将是 me 和模拟用户电子邮件。任何其他值都会导致错误(因为服务帐户将充当模拟用户,并且只能访问模拟用户的数据)。

因此,me 的唯一替代方案是经过身份验证的用户电子邮件地址,但您当然会得到相同的数据。

域范围的委托示例:

creds = service_account.Credentials.from_service_account_file('credentials.json', scopes=SCOPES)
creds = creds.with_subject('your_target_user@email.com')
service = build('gmail', 'v1', credentials=creds)
messages = service.users().messages().list(userId="me").execute()

【讨论】:

以上是关于Gmail NodeJs客户端中的Gmail API userId用例?的主要内容,如果未能解决你的问题,请参考以下文章

使用 nodejs 中的服务帐户域范围委派通过 Google Apps Gmail 发送邮件

gmail中的超链接不可点击

带有gmail api的node js,API返回错误:错误:未授权客户端

如何使用 nodejs 下载 Gmail API 的附件?

如何在 Nodejs 中使用 gmail api 在同一对话中回复电子邮件

NodeJS:无法使用服务帐户访问 Gmail API