nest-project/src/auth/auth.service.ts

56 lines
1.6 KiB
TypeScript

import { Injectable, BadRequestException } from '@nestjs/common'
import { PasswordService } from 'src/users/password.service'
import { Token, TokenPayload } from './dto/token.dto'
import { JwtService } from '@nestjs/jwt'
import { ConfigService } from '@nestjs/config'
import { UsersService } from 'src/users/users.service'
import { CreateUserDto } from 'src/users/dto/create-user.dto'
@Injectable()
export class AuthService {
constructor(
private passwordService: PasswordService,
private jwtService: JwtService,
private configService: ConfigService,
private userService: UsersService,
) {}
async register(payload: CreateUserDto) {
const user = await this.userService.createUser(payload)
return this.generateTokens({ userId: user.id })
}
async login(email: string, password: string) {
const user = await this.userService.findUser({ email })
const passwordValid = await this.passwordService.validatePassword(
password,
user.password,
)
if (!passwordValid) {
throw new BadRequestException('Invalid password')
}
return this.generateTokens({ userId: user.id })
}
private generateTokens(payload: TokenPayload): Token {
const accessToken = this.jwtService.sign(payload, {
secret: this.configService.get<string>(
'JWT_ACCESS_SECRET',
'JWT_ACCESS_SECRET',
),
expiresIn: '30min',
})
const refreshToken = this.jwtService.sign(payload, {
secret: this.configService.get<string>(
'JWT_REFRESH_SECRET',
'JWT_REFRESH_SECRET',
),
expiresIn: '7d',
})
return { accessToken, refreshToken }
}
}