我正在使用Google API客户端的 Node 版本。即:google-api-nodejs-client

作为此过程的一部分,我将设置oauth-flow(确切地说是'google webserver'流)。

作为身份验证的一部分,这包括进行如下调用:

 var oauth2Client = new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);


 oauth2Client.setCredentials(userSpecificTokens)

显然,第一个调用是特定于应用程序的,而第二个调用是特定于用户的。

在这种情况下,什么被认为是好的做法?任何一个:
  • 每个用户有1个oauth2Client和缓存/保存 token ,并在每个请求中使用oauth2Client.setCredentials(userSpecificTokens)注入(inject)它们。这实际上为每个请求创建了一个新的oauth2Client
  • 每个用户都有一个oauthClient,包括已应用的oauth2Client.setCredentials(userSpecificTokens),该ojit_code在需要时创建并在以后进行缓存。
  • 最佳答案

    我相信您的第一种方法是正确的



    但是,这行是不正确的



    对其进行更新后,仅创建一次oauth2client-new OAuth2Client(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);setCredentials()只是交换存储在该OAuth2Client对象中的凭据。基本上,这意味着如果您采用第二种方法,则不必要地会有许多其他实例化的OAuth2Client。唯一需要实例化"new" Oauth2Client的时间是当您想使用其他 token / key 进行连接时。

    将 token 存储在数据库或 session 中并通过在客户端的单个实例上设置凭据来完全重用您所描述的重用 token ,这在某种程度上是很常见的。 (https://security.stackexchange.com/questions/72475/should-we-store-accesstoken-in-our-database-for-oauth2)

    作为引用,文档提供了一些见解,并基本描述了您的第一种方法-
    https://github.com/google/google-api-nodejs-client/#request-level-options

    10-08 16:21