Skip to content
Snippets Groups Projects
auth.service.ts 1.64 KiB
Newer Older
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { DateTime } from 'luxon';
Bastien DUMONT's avatar
Bastien DUMONT committed
import { IUser } from '../users/interfaces/user.interface';
Hugo SUBTIL's avatar
Hugo SUBTIL committed
import { User } from '../users/schemas/user.schema';
Bastien DUMONT's avatar
Bastien DUMONT committed
import { UsersService } from '../users/services/users.service';
import { LoginDto } from './login-dto';

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

Bastien DUMONT's avatar
Bastien DUMONT committed
  async validateUser(loginDto: LoginDto): Promise<IUser> {
    const user = await this.usersService.findOne(loginDto.email);
    if (user) {
      return user;
Bastien DUMONT's avatar
Bastien DUMONT committed
  async login(loginDto: LoginDto) {
    // check user auth in db
    const user = await this.usersService.checkLogin(loginDto);
    if (!user.emailVerified) {
      throw new HttpException('Unverified user', HttpStatus.I_AM_A_TEAPOT);

    // generate and sign token
    const token = this._createToken(user);

    return {
      username: user.email,
      name: user.name,
      surname: user.surname,
  async resendEmail(loginDto: LoginDto) {
    // check user auth in db
    const user = await this.usersService.checkLogin(loginDto);
    if (user.emailVerified) {
      throw new HttpException('User already verified', HttpStatus.UNPROCESSABLE_ENTITY);
    }
    return this.usersService.sendVerifyUserMail(user);
  }

Bastien DUMONT's avatar
Bastien DUMONT committed
  private _createToken(user: User) {
    const local = DateTime.local().setZone('Europe/Paris');
Hugo SUBTIL's avatar
Hugo SUBTIL committed
      accessToken: this.jwtService.sign({ email: user.email, role: user.role }),
      expiresAt: local.plus({ days: 1 }),