Я скачал образец 19-auth и добавил к нему некоторый отладочный код console.log, затем обнаружил некоторые проблемы.
Код в JwtAuthGuard никогда не выполняется: «2222222» не выводился на консоль вкод ниже:
canActivate(context: ExecutionContext) {
console.log('22222222222');
// add your custom authentication logic here
// for example, call super.logIn(request) to establish a session.
return super.canActivate(context);
}
Когда я изменил защиту на JwtAuthGuard в AuthController:
@get('data')
@UseGuards(JwtAuthGuard)
findAll(@Req() req) {
return req.user;
// this route is restricted by AuthGuard
// JWT strategy
}
был вызван код в JwtAuthGuard, но в функции canActivate я не могуполучить информацию о пользователе из запроса.а функция canActivate была вызвана до JwtStrategy?
Может кто-нибудь объяснить, как выполняется код для модуля auth и как получить информацию о пользователе в JwtAuthGuard?
вставить последний код ижурнал консоли здесь:
JwtStrategy
/**
* jwt passport 调用validate方法来判断是否授权用户进行接口调用
* @param payload
*/
async validate(payload: AuthPayload) {
Logger.log(`payload is ${JSON.stringify(payload)}`, 'JwtStrategy');
const user = await this.authService.validateUser(payload.id);
if (!user) {
throw new UnauthorizedException('不存在的用户信息');
}
return user;
}
JwtAuthGuard
canActivate(context: ExecutionContext) {
// add your custom authentication logic here
// for example, call super.logIn(request) to establish a session.
// this.accessPriv = this.reflector.get<string>('accessPriv', context.getHandler());
console.log('canActivate executed 111111111111111111');
return super.canActivate(context);
}
и журнал консоли, как показано ниже:
canActivate executed 111111111111111111
[Nest] 14080 - 2019-04-01 11:19 [JwtStrategy] payload is {"userName":"fanliang","id":"1","iat":1553772641,"exp":1554377441} +2286ms
it seems that the canActivate() function of JwtAuthGuard executed before the validate() function of JwtStrategy, but the user info was attached to the request after JwtStrategy validate().
я хочу получить информацию о пользователе из запроса в canActivate () пользовательского AuthGuard, такого как JwtAuthGuard