【发布时间】:2022-05-13 03:58:41
【问题描述】:
我点击这个链接https://docs.nestjs.com/security/authentication#enable-authentication-globally
我继续创建了一个公共警卫
但是当我将@Public 放在任何方法之上时,它无法识别我的请求
并返回未定义的!
我想检测用户是否登录公共路由
JwtAuthGuard
export class JwtAuthGuard extends AuthGuard('jwt') {
constructor(private reflector: Reflector) {
super();
}
canActivate(context: ExecutionContext) {
const isPublic = this.reflector.getAllAndOverride<boolean>(IS_PUBLIC_KEY, [
context.getHandler(),
context.getClass(),
]);
if (isPublic) {
return true;
}
return super.canActivate(context);
}
}
公共装饰师
export const IS_PUBLIC_KEY = 'isPublic';
export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);
样品控制器
@Public()
@Get()
async find(@LoginUser() user: User): Promise<any> {
console.log(user);
// the user is undefined even after login
}
【问题讨论】:
-
什么返回
underfined?你能显示代码吗?这个公卫是做什么的? -
这个守卫的任务是在没有 @Public Decorater 的情况下检查 jwt 令牌的存在,但是当我把它放在任何方法之上时,它无法识别用户
-
@JayMcDoniel 我编辑了问题并添加了一些代码
标签: node.js authorization nestjs guard