portal_publico/portal_api/authentication.py

20 lines
1.0 KiB
Python

from rest_framework.authentication import SessionAuthentication
from rest_framework.request import Request
class PidSessionAuthentication(SessionAuthentication):
"""`SessionAuthentication` padrão do DRF não define `authenticate_header()`
(devolve `None`) — sem um cabeçalho `WWW-Authenticate` pra anunciar, o DRF
rebaixa `NotAuthenticated` de 401 pra 403 (`rest_framework.views.exception_handler`),
já que semanticamente 401 exige indicar como o cliente deveria se autenticar.
O frontend (`pidApiRequest`, `api.js`) só redireciona pro login em 401 — com o
padrão do DRF, qualquer request sem sessão ativa (cookie expirado, nunca logado)
voltava 403, e a página ficava travada mostrando o shell vazio/sem usuário em vez
de voltar pro login. Devolver um valor não-vazio aqui mantém o status em 401,
sem acionar nenhum prompt nativo do navegador (só "Basic"/"Digest" fazem isso).
"""
def authenticate_header(self, request: Request) -> str:
return "Session"