Я получил ошибку относительно JWT в моем приложении nest js - PullRequest
0 голосов
/ 20 апреля 2020

Пытаюсь создать токен JWT, для этого я создал пользователя и создал две разные папки с файлами. Но я получил ошибку, о которой упоминал ниже. Также я предоставляю код аутентификации и пользовательских файлов в своем вопросе. Вот скриншот я получил ошибку:

enter image description here

Вот код пользовательских сервисов:

import { Injectable } from '@nestjs/common';
//import {logindto} from 'src/crud/DTO/login.dto'
import {credentials} from 'src/crud/crud.model'
import {model,Model} from 'mongoose'
import {InjectModel} from '@nestjs/mongoose'
export type User = any;

@Injectable()
export class UsersService {
  constructor(@InjectModel('credentials')private readonly credentials:Model<credentials> ) {}

  async findByEmail(email: string): Promise<User> {
    return await this.credentials.findOne({
        where: {
            email: email,
        }
    });
  }
}

Вот код сервисов аутентификации:

import { Injectable } from '@nestjs/common';
import { UsersService } from '../users/users.service';
import { JwtService } from '@nestjs/jwt';
import { logindto } from 'src/crud/DTO/login.dto';

    @Injectable()
    export class AuthService {
      constructor(
        private userService: UsersService,
        private jwtService: JwtService
      ) {}

      private async validate(userData: logindto): Promise<logindto> {
        return await this.userService.findByEmail(userData.username);
    }

    public async login(user: logindto): Promise< any | { status: number }>{
      return this.validate(user).then((userData)=>{
        if(!userData){
          return { status: 404 };
        }
        let payload = `${userData.username}${userData.password}`;
        const accessToken = this.jwtService.sign(payload);

        return {
           expires_in: 3600,
           access_token: accessToken,
           user_id: payload,
           status: 200
        };

      });
    }

    }

Вот код контроллера авторизации:

import { Controller,Post,Body } from '@nestjs/common';
import { AuthService } from '../auth.service';
import { logindto } from 'src/crud/DTO/login.dto';

@Controller('auth')
export class AuthController {
    constructor(private  readonly  authService:  AuthService) {}
    @Post('credentials')
    async login(@Body() user: logindto): Promise<any> {
      return this.authService.login(user);
    }  
}

Вот код DTO:

import {IsString, IsInt,IsEmail,IsNotEmpty, IsNumberString, IsIn,IsHash} from 'class-validator'

export class logindto{
    @IsEmail()
    username:string

    @IsNotEmpty()
    password:String
}

Вот код модели:

export interface credentials extends mongoose.Document{
    email:String,
    password:String
}

Вот код root модуля приложения:

import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CrudController } from './crud/crud.controller';
//import { CrudService } from './crud/crud.service';
import { CrudModule } from './crud/crud.module';
import {MongooseModule} from '@nestjs/mongoose'
//import {studentschema} from './crud/crud.model'
//import {studentmodel} from './crud/crud.model'
import { AuthModule } from './auth/auth.module';
import { UsersModule } from './users/users.module';
import { MulterModule } from '@nestjs/platform-express';
import { UsersService } from './users/users.service';
import {credentials} from 'src/crud/crud.model'
import { AuthService } from './auth/auth.service';

@Module({
  imports: [AppModule,CrudModule,MongooseModule.forRoot("mongodb://localhost:27017/mydb"), MulterModule.register({
    dest:'./uploads',
  })],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
...