20 lines
1.0 KiB
Python
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"
|