如何从 Gmail OAuth2.0 的访问令牌中获取 userId

How to get userId from access token for Gmail OAuth2.0

我想做什么

我正在尝试创建一个可以从用户的 Gmail 中提取电子邮件的网络应用程序。我知道我需要通过 Google OAuth 2.0.

进行身份验证

我想做的是在收件箱上设置 watch() 请求。然后,当监视的收件箱收到一封电子邮件时,我想得到通知。我正在使用 Google 的 PubSub API.

我做了什么

我遵循了 Gmail OAuth documentation 中给出的步骤,但对如何为多个用户存储多个访问令牌感到困惑。

因此,当用户首次使用他们的 Gmail 帐户登录时,我会生成一个代码,我用它来交换访问令牌。然后我将其存储在数据库中。但是,当我收到有关电子邮件的通知时,我只会从 API 用户的电子邮件地址收到。我想为该用户做一些进一步的 API 调用。所以现在我需要为特定用户检索令牌。但是...

问题

...如何通过电子邮件存储访问令牌?我只有在他们 login/authorize 后才能访问他们的令牌。有没有办法从访问令牌中检索电子邮件地址?然后我可以将访问令牌存储为 <email address>-><access token>.

的键值对

您可以在他们首次登录时立即执行 Users: getProfile 请求,如下所示:

GET https://www.googleapis.com/gmail/v1/users/me/profile?access_token=<ACCESS_TOKEN_OF_THE_LOGGED_IN_USER>

响应:

{
 "emailAddress": "example@gmail.com", // Here is the user's email address.
 "messagesTotal": 6446,
 "threadsTotal": 4495,
 "historyId": "570232" // Here is the current historyId of his account.
}

然后,当您通过 watch() 收到推送请求时,您可以在上面对 see what has happened 的响应中使用 historyId