javascript 下一个Auth谷歌OAuth与自定义后端的访问令牌和刷新令牌

46scxncf  于 2023-01-29  发布在  Java
关注(0)|答案(1)|浏览(89)

我有一个公开以下API的NestJS后端:

@Post('sign-in-with-google-account')
   async signInWithGoogleAccount(
     @Body body: { idToken: string }, 
     @Res({ passthrough: true }) response: Response
   ) {
     const user = await getUserFromGoogleIdToken(body.idToken)
     const tokens = await generateAccessAndRefreshTokensForUser(user)

     response.cookie('refreshToken', tokens.refreshToken, {
         httpOnly: true,
         expires: new Date(tokenExpirationDate),
         secure: true,
         sameSite: 'none'
     })

     return { accessToken: tokens.accessToken }
   }

它接收来自google oauth的id令牌,在数据库中找到用户,并签署一个JWT访问令牌和刷新令牌,刷新令牌存储为httpOnly cookie,并返回访问令牌。
现在,在我的next.js应用程序中配置了next-auth,我有以下内容:

import GoogleProvider from "next-auth/providers/google";

...
providers: [
  GoogleProvider({
    clientId: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET
  })
]
...

问题是next-auth会生成自己的令牌,但是我想让next-auth使用自己的访问和刷新令牌,我该怎么做呢?
此外,在NestJS中,我有一个API来刷新访问令牌,如下所示:

@Get('refresh-access-token')
async refreshAccessToken(@Req() request: Request) {
  const accessToken = await getNewAccessTokenFromRefreshToken(request.cookies.refreshToken)
  return { accessToken } 
}

如何让next-auth使用refresh-access-token API每10分钟(访问令牌到期日)刷新一次访问令牌?

nbysray5

nbysray51#

我认为你需要把以前的时间保存到本地存储器,然后和当前时间比较来调用API,你可以使用moment.unix()或者moment.diff()来做这件事。

相关问题