curupiras
Version:
Curupiras é um template back-end que utiliza Express e TypeScript
32 lines (27 loc) • 1.09 kB
text/typescript
import { inject, injectable } from 'tsyringe';
import IUserRepository from '../database/repositoriesInterface/IUserRepository';
import argon2 from 'argon2';
import AppError from '@shared/errors/AppError';
import jwt from 'jsonwebtoken';
import { privateKey } from '@shared/config/jwt/readKey';
()
export default class LoginService {
constructor(
('UserRepository') private userRepository: IUserRepository,
) {}
private async verifyPassword({ email, password }) {
const userData = await this.userRepository.findByEmail(email);
const validPassword = await argon2.verify(userData.password, password);
if (!validPassword) throw new AppError('Invalid user', 401)
return userData.id;
}
private generateToken(userId: string) {
const token = jwt.sign({ sub: userId }, privateKey, { algorithm: 'RS256', expiresIn: '1h' })
return token;
}
async execute(data: { email: string, password: string }): Promise<string> {
const userId = await this.verifyPassword(data);
const token = this.generateToken(userId);
return token;
}
}