Two*_*ses 6 javascript authentication next.js nestjs next-auth
我有一个 NestJS 后端,它公开以下 API:
@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 }
}
Run Code Online (Sandbox Code Playgroud)
它从 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
})
]
...
Run Code Online (Sandbox Code Playgroud)
问题是next-auth
生成自己的代币。但我想next-auth
使用我自己的 NestJS 后端的访问和刷新令牌,我该怎么做?
另外,在 NestJS 中,我有一个 API 可以刷新访问令牌,如下所示:
@Get('refresh-access-token')
async refreshAccessToken(@Req() request: Request) {
const accessToken = await getNewAccessTokenFromRefreshToken(request.cookies.refreshToken)
return { accessToken }
}
Run Code Online (Sandbox Code Playgroud)
我如何知道每 10 分钟(访问令牌到期日期)next-auth
使用 API 刷新一次访问令牌?refresh-access-token