首页 > 解决方案 > NodeJS,如何使用谷歌 api 获取带有刷新令牌的新令牌?

问题描述

在 google api doc https://developers.google.com/sheets/api/quickstart/nodejs之后,找不到使用刷新令牌和 oauth2 客户端获取新令牌的方法。

医生说: "The application should store the refresh token for future use and use the access token to access a Google API. Once the access token expires, the application uses the refresh token to obtain a new one."

如何使用带有 google oAuth2 Client 的刷新令牌获取新令牌?

到目前为止,我已经使用一个简单的帖子进行了管理

const getTokenWithRefresh = async (refresh_token) => {
  return axios
  .post("https://accounts.google.com/o/oauth2/token", {
    client_id: clientId,
    client_secret: clientSecret,
    refresh_token: refresh_token,
    grant_type: "refresh_token",
  })
  .then((response) => {
    // TODO save new token here
    console.log("response", response.data.access_token);
    return response.data;
  })
  .catch((response) => console.log("error", response))
}

但理想情况下希望看到更清洁的方式来做到这一点。

标签: node.jsgoogle-sheetsgoogle-apigoogle-oauthgoogle-api-nodejs-client

解决方案


const {google} = require('googleapis')


const getTokenWithRefresh = (secret, refreshToken) => {

    let oauth2Client = new google.auth.OAuth2(
           secret.clientID,
           secret.clientSecret,
           secret.redirectUrls
    )

    oauth2Client.credentials.refresh_token = refreshToken

    oauth2Client.refreshAccessToken( (error, tokens) => {
           if( !error ){
                // persist tokens.access_token
                // persist tokens.refresh_token (for future refreshs)
           }
    })

}

refreshAccessToken()已弃用(我真的很想知道为什么)。但由于它仍然有效,这仍然是我要走的路


推荐阅读