Определяет, действителен ли токен JWT пользователя .При успешной проверке возвращает полезную нагрузку jwt

#jwt #nestjs #passport-local #nestjs-passport #nestjs-jwt

Вопрос:

Я пытаюсь проверить в функции проверки в jwt.strategy.ts, действителен ли токен или нет, Если токен аутентификации заголовка на предъявителя JWT недействителен, исключение выбрасывается в другом случае, возвращается полезная нагрузка JWT.Более конкретно, Passport создаст свойство «пользователь» для объекта экспресс-запроса HTTP и назначит все, что будет возвращено здесь, req.user

 import { Injectable } from '@nestjs/common';  import { PassportStrategy } from '@nestjs/passport';  import { Strategy, ExtractJwt } from 'passport-jwt';  import * as dotenv from 'dotenv';  dotenv.config();  @Injectable()  export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {  constructor() {  super({  jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),  ignoreException: true,  secretOrKey: process.env.JWT_SECRET,  });  }      @param payload    async validate(payload: any) {    const isAuthorized = this.authConfig.roles.some((role) =gt; payload.role?.includes(role));  if(!isAuthorized) {  Logger.error(`Unauthorized: Invalid role`);  throw new UnauthorizedException();  }          console.log('validate()',payload);  return { userId: payload.sub, username: payload.username };  }  }  

jwt.стратегия.ts

 import { Body, Controller, Post } from '@nestjs/common'; import { AuthDto } from './dtos/auth.dto'; import { AuthService } from './auth.service';  @Controller('auth') export class AuthController {  constructor(private authService: AuthService) {}   /**  * API endpoint handler for user login  * @param dto  */  @Post('/login')  login(@Body() dto: AuthDto) {  console.log('hi')  this.authService.login(dto)  }      }  

auth.контроллер.ts

 import { Module } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { JwtStrategy } from './strategies/jwt.strategy'; import { MongooseModule } from '@nestjs/mongoose'; import { User, UserSchema } from '@sp/schemas'; import { UserService } from '../user/user.service'; import { UserController } from '../user/user.controller'; import * as dotenv from 'dotenv';  dotenv.config(); @Module({  imports: [  JwtModule.register({  secret: process.env.JWT_SECRET,  signOptions: { expiresIn: '5m' },  }),   MongooseModule.forFeature([{ name: User.name, schema: UserSchema }])   ],  controllers: [AuthController],  providers: [AuthService, JwtStrategy, UserService], }) export class AuthModule {}  

auth.module.ts

 import { HttpException, Injectable, UnauthorizedException } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; const jwt = require("jsonwebtoken"); import { AuthDto } from './dtos/auth.dto'; import { UserService } from '../user/user.service';   @Injectable() export class AuthService {  constructor(private jwtService: JwtService, private Users: UserService) {}  /**  * Determines if the user credentials provided are correct  * @param dto  */  async login(dto: AuthDto) {  this.Users.findByEmail(dto.email)  .then((user)=gt;{  if(!user){  throw new HttpException("not autheroized",401)  }  else{  if(dto.password == user.password){  const payload = { sub: user.giuEmail ,username: user.name};  console.log(payload);  console.log(this.jwtService.sign(payload));  return {    access_token: this.jwtService.sign(payload),  };  }  }  })       } }  

auth.service.ts