devhatt / octopost-backend

Backend da aplicação octopost
https://devhatt.github.io/octopost-backend/
9 stars 24 forks source link

[AUTH] Vincular usuário a requisição #192

Open k1nha opened 2 months ago

k1nha commented 2 months ago

Quando fazemos o login, não temos acesso ao contexto do usuário que está utilizando a nossa api

Como está hoje:

export class AuthenticationJWT {
  jwtAuth: AsyncRequestHandler = async (req, res, next) => {
    try {
      const token = req.headers.authorization?.split(' ')[1];
      if (!token) {
        return res.status(401).json({ error: 'Token missing' });
      }

      const { userId } = this.jwtHelper.parseToken(token);

      const user = await this.userRepository.findById(userId);
      console.log('asdasdasd');
      if (!user) {
        return res.status(401).json({ error: 'Invalid user' });
      }

      next();
    } catch (error) {
      if (error instanceof InvalidTokenException) {
        return res.status(401).json({ error: 'Invalid token' });
      }
      return res.status(500).json({ error: 'Internal Server Error' });
    }
  };

  constructor(
    private jwtHelper: JWTHelper,
    private userRepository: UserRepository
  ) {}
}

O ideal é que seja colocado dentro do contexto da request o usuário,

algo como

export class AuthenticationJWT {
  jwtAuth: AsyncRequestHandler = async (req, res, next) => {
    try {
      const token = req.headers.authorization?.split(' ')[1];
      if (!token) {
        return res.status(401).json({ error: 'Token missing' });
      }

      const { userId } = this.jwtHelper.parseToken(token);

      const user = await this.userRepository.findById(userId);
      console.log('asdasdasd');
      if (!user) {
        return res.status(401).json({ error: 'Invalid user' });
      }

    req.user = user

      next();
    } catch (error) {
      if (error instanceof InvalidTokenException) {
        return res.status(401).json({ error: 'Invalid token' });
      }
      return res.status(500).json({ error: 'Internal Server Error' });
    }
  };

  constructor(
    private jwtHelper: JWTHelper,
    private userRepository: UserRepository
  ) {}
}