update refreshToken
This commit is contained in:
parent
5bc8a7e072
commit
167d2e096a
@ -3,7 +3,7 @@ import { registerAs, ConfigType } from '@nestjs/config'
|
||||
export const securityConfig = registerAs('security', () => ({
|
||||
jwt_access_secret: process.env.JWT_ACCESS_SECRET || 'JWT_ACCESS_SECRET',
|
||||
jwt_refresh_secret: process.env.JWT_REFRESH_SECRET || 'JWT_REFRESH_SECRET',
|
||||
expiresIn: process.env.expiresIn || '30m',
|
||||
expiresIn: process.env.expiresIn || '15m',
|
||||
refreshIn: process.env.refreshIn || '7d',
|
||||
bcryptSaltOrRound: Number(process.env.bcryptSaltOrRound) || 10,
|
||||
}))
|
||||
|
@ -17,3 +17,10 @@ export class TokenRefreshPayload {
|
||||
export class TokenPayload {
|
||||
userId: string
|
||||
}
|
||||
|
||||
export class TokenContnet extends TokenPayload {
|
||||
/** Issued at */
|
||||
iat: number
|
||||
/** Expiration time */
|
||||
exp: number
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Inject, Injectable, ForbiddenException } from '@nestjs/common'
|
||||
import { Inject, Injectable, UnauthorizedException } from '@nestjs/common'
|
||||
import * as bcrypt from 'bcrypt'
|
||||
import { PrismaService } from 'nestjs-prisma'
|
||||
import { Token, TokenPayload } from './dto/token.dto'
|
||||
import { Token, TokenPayload, TokenContnet } from './dto/token.dto'
|
||||
import { JwtService } from '@nestjs/jwt'
|
||||
import { securityConfig, SecurityConfig } from 'src/common/configs'
|
||||
|
||||
@ -22,17 +22,32 @@ export class TokenService {
|
||||
const passwordValid = await bcrypt.compare(password, user.password)
|
||||
|
||||
if (!passwordValid) {
|
||||
throw new ForbiddenException('Invalid password')
|
||||
throw new UnauthorizedException('Invalid password')
|
||||
}
|
||||
|
||||
return this.generateTokens({ userId: user.id })
|
||||
}
|
||||
|
||||
async refreshToken(token: string) {
|
||||
const { userId } = this.jwtService.verify<TokenPayload>(token, {
|
||||
const { userId, iat } = this.jwtService.verify<TokenContnet>(token, {
|
||||
secret: this.secureConfig.jwt_refresh_secret,
|
||||
})
|
||||
return this.generateTokens({ userId })
|
||||
const user = await this.prismaService.user.findUniqueOrThrow({
|
||||
where: { id: userId },
|
||||
})
|
||||
if (iat * 1000 < user.updatedAt.getTime()) {
|
||||
throw new UnauthorizedException('token失效,请重新登录')
|
||||
}
|
||||
return {
|
||||
refreshToken: token,
|
||||
accessToken: this.jwtService.sign(
|
||||
{ userId },
|
||||
{
|
||||
secret: this.secureConfig.jwt_refresh_secret,
|
||||
expiresIn: this.secureConfig.refreshIn,
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
generateTokens(payload: TokenPayload): Token {
|
||||
|
Loading…
Reference in New Issue
Block a user