Пытаюсь создать токен JWT, для этого я создал пользователя и создал две разные папки с файлами. Но я получил ошибку, о которой упоминал ниже. Также я предоставляю код аутентификации и пользовательских файлов в своем вопросе. Вот скриншот я получил ошибку:
Вот код пользовательских сервисов:
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 {}