Closed MaxNstk closed 9 months ago
Descobri, o meu problema era a sequencia em que os Middlewares eram vinculados. HandleException deveria vir antes do meu middleware.
@MaxNstk desculpa a demora... e obrigado por dar o feedback de como resolveu... pode ajudar outros que tiverem problema com isso... vlw
Bom dia, estou criando um CallBack personalizado para validar alguns tipos de API que precisam que o usuário seja Administrador. Para isso estou utilizando o JWT Token em conjunto com os Claims para captura do token e recuperação de usuário. Tudo funciona perfeitamente, entretanto, ao criar a excessão EHorseCallbackInterrupted passando minha mensagem, ele retorna um 404 Not found no retorno da API. Ps, tenho outros callbacks que funcionam perfeitamente. (Com propósitos diferentes). O código a seguir é a implementação do meu CallBack. A lógica dentro dele funciona perfeitamente. Em seguida o código do callback do jwt, do qual usei como base para minha suposição.
function SupervisorRequest: THorseCallback; begin Result := procedure(Req: THorseRequest; Res: THorseResponse; Next: {$IF DEFINED(FPC)}TNextProc{$ELSE}TProc{$ENDIF}) begin try if not TUsuarioController.CriarComCodigoOuNome( Req.Session.IdUsuario
).GetUsuario.Supervisor then
begin
Res.Send('Não autorizado, é necessário um usuário supervisor').Status(THTTPStatus.Unauthorized);
raise EHorseCallbackInterrupted.Create('Unauthorized');
end
else
Next;
except
on E: EHorseCallbackInterrupted do
raise;
on E: Exception do
begin
TLog.Log('Exception em SupervisorRequest: '+E.Message, Req);
raise EHorseCallbackInterrupted.Create('Unauthorized');
end;
end;
end;
end;
Dentro do Middleware, Horse.JTW ele tem o seguinte retorno em diversos locais, entretanto, a resposta deles é 401 e com a mensagem criada: except on E: EHorseCallbackInterrupted do raise; on E: Exception do begin AHorseResponse.Send('Invalid token authorization. ' + E.Message).Status(THTTPStatus.Unauthorized); raise EHorseCallbackInterrupted.Create; end; end;
Ps. Delphi 10.4 stock_app_ws: ├── horse-logger@2.0.7 │ ├── horse-utils-clientip@0.0.8 │ │ └── horse@3.1.5 │ └── horse@3.1.5 ├── jhonson@1.1.8 │ └── horse@3.1.5 ├── handle-exception@0.1.9 │ ├── horse@3.1.5 │ └── jhonson@1.1.8 │ └── horse@3.1.5 ├── horse@3.1.5 ├── horse-compression@1.1.11 │ └── horse@3.1.5 └── horse-jwt@2.0.14 ├── horse@3.1.5 ├── delphi-jose-jwt@v3.3.0 └── hashlib4pascal@1.0.0