我有一个公开以下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分钟(访问令牌到期日)刷新一次访问令牌?
1条答案
按热度按时间nbysray51#
我认为你需要把以前的时间保存到本地存储器,然后和当前时间比较来调用API,你可以使用
moment.unix()
或者moment.diff()
来做这件事。