Nest.js
[Nest.js] 9 - Authentification - module/components
ESTJames
2021. 9. 13. 18:44
Contents
1. AuthModule
2. CLI - module, service, controller
3. Entity, repository
4. DTO
5. DI
1. AuthModule
2. CLI - module, service, controller
$ nest generate module auth
$ nest generate service auth --no-spec
$ nest generate controller auth --no-spec
3. Entity, Repository
- src/auth/user.entity.ts
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class User extends BaseEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
password: string;
}
- src/auth/user.repository.ts
import { EntityRepository, Repository } from 'typeorm';
import { User } from './user.entity';
@EntityRepository(User)
export class UserRepository extends Repository<User> {}
- register this into where it needed, auth.module.ts below.
- src/auth/auth.module.ts
...
import { UserRepository } from './user.repository';
@Module({
imports: [
TypeOrmModule.forFeature([UserRepository])
],
...
})
export class AuthModule {}
4. DTO(Data Transfer Object)
- src/auth/dto/auth-credential.dto.ts
import { IsString, Matches, MaxLength, MinLength } from 'class-validator'; // 1
export class AuthCredentialsDto {
@IsString()
@MinLength(4)
@MaxLength(20)
username: string;
@IsString()
@MinLength(4)
@MaxLength(20)
@Matches(/^[a-zA-Z0-9]*$/, {
message: 'password only accepts english and number',
})
password: string;
}
// 1. global pipe will validate this dto with the decorators.
5. DI(Dependency Injection)
- src/auth/auth.controller.ts
import { Controller } from '@nestjs/common';
import { AuthService } from './auth.service';
@Controller('auth')
export class AuthController {
constructor(private userService: AuthService) {}
}
- src/auth/auth.service.ts
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { UserRepository } from './user.repository';
@Injectable()
export class AuthService {
constructor(
@InjectRepository(UserRepository)
private userRepository: UserRepository,
) {}
}