first commit
This commit is contained in:
52
app/Module/Auth/v0/Middlewares/AuthMiddleware.php
Executable file
52
app/Module/Auth/v0/Middlewares/AuthMiddleware.php
Executable file
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
namespace Zampet\Module\Auth\v0\Middlewares;
|
||||
|
||||
use Exception;
|
||||
use Zampet\Services\JWTService;
|
||||
use Zampet\Module\Auth\v0\Services\AuthService;
|
||||
|
||||
class AuthMiddleware {
|
||||
/**
|
||||
* Gerencia o processo de autenticação de uma requisição de API via token Bearer.
|
||||
*
|
||||
* Este método estático atua como um **middleware de autenticação**, verificando a presença e a validade de um token JWT em uma requisição HTTP.
|
||||
*
|
||||
* #### Fluxo de Operação:
|
||||
* 1. **Obtenção do Token:** Tenta extrair o token Bearer do cabeçalho da requisição usando `JWTService::getBearerToken()`.
|
||||
* 2. **Verificação de Presença:** Se o token não for encontrado, uma `Exception` é lançada com o código `401 Unauthorized`.
|
||||
* 3. **Validação do Token:** Chama `AuthService::validateToken()` para verificar a validade do token (assinatura, expiração e status no banco de dados).
|
||||
* 4. **Conclusão:**
|
||||
* * Se a validação for bem-sucedida, o método retorna `true`, permitindo que o processamento da rota continue.
|
||||
*
|
||||
* #### Tratamento de Erros:
|
||||
* - Qualquer `Exception` lançada durante o processo (token ausente, falha de validação JWT, token expirado) é capturada.
|
||||
* - O método retorna um array de erro formatado, contendo o código HTTP e a mensagem de erro da exceção, o que é útil para a camada de controle enviar uma resposta JSON padronizada ao cliente.
|
||||
*
|
||||
* @return array|bool Retorna `true` se o token for válido; caso contrário, retorna um array associativo com o status da operação, o código de resposta HTTP e uma mensagem de erro.
|
||||
*/
|
||||
public static function handle(): array|bool {
|
||||
// Recebe o token JWT do cabeçalho Authorization
|
||||
$bearerToken = JWTService::getBearerToken();
|
||||
|
||||
try {
|
||||
// Verifica se o token está presente
|
||||
if (!$bearerToken) {
|
||||
throw new Exception(message: "Token not provided", code: 401);
|
||||
}
|
||||
|
||||
// Verifica se o token é válido
|
||||
$validateTokenService = (new AuthService())->validateToken(token: $bearerToken);
|
||||
if ($validateTokenService['status'] !== 'success') {
|
||||
throw new Exception(message: $validateTokenService['message'], code: 401);
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch(Exception $e) {
|
||||
return [
|
||||
'response_code' => $e->getCode(),
|
||||
'status' => 'error',
|
||||
'message' => $e->getMessage()
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user