NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架。它使用现代 JavaScript 或 TypeScript 构建,并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式响应编程)的元素。
Passport 是一个 Node.js 的中间件,用于认证。它提供了多种策略来验证用户的身份,例如本地策略、OAuth、OpenID Connect 等。
JWT(JSON Web Token) 是一种开放标准(RFC 7519),用于在网络应用环境间安全地将信息作为 JSON 对象传输。
当用户更改密码时,为了安全起见,应该使旧的 JWT 令牌失效。这可以通过以下几种方式实现:
// 示例代码
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { User } from './user.entity';
@Injectable()
export class AuthService {
constructor(private jwtService: JwtService) {}
async login(user: User) {
const payload = { userId: user.id };
const accessToken = this.jwtService.sign(payload);
const refreshToken = this.generateRefreshToken(user.id);
// 存储 refreshToken 到数据库
return { accessToken, refreshToken };
}
async refreshToken(userId: string) {
const user = await User.findOne(userId);
if (!user) {
throw new Error('User not found');
}
const payload = { userId: user.id };
const accessToken = this.jwtService.sign(payload);
const refreshToken = this.generateRefreshToken(user.id);
// 更新数据库中的 refreshToken
return { accessToken, refreshToken };
}
async changePassword(userId: string) {
// 使当前的 refreshToken 失效
// 删除或更新数据库中的 refreshToken
}
private generateRefreshToken(userId: string) {
// 生成刷新令牌的逻辑
}
}
// 示例代码
import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { User } from './user.entity';
@Injectable()
export class AuthService {
constructor(private jwtService: JwtService) {}
async login(user: User) {
const payload = { userId: user.id };
const accessToken = this.jwtService.sign(payload);
// 存储 accessToken 到黑名单(如果需要)
return { accessToken };
}
async changePassword(userId: string) {
// 将旧的 accessToken 加入黑名单
}
async verifyToken(token: string) {
// 检查 token 是否在黑名单中
// 如果在黑名单中,抛出异常
}
}
通过以上方法,可以在用户更改密码时有效地使旧的 JWT 令牌失效,从而提高系统的安全性。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云