Merge branch 'fix/api-403-noauth-reauth' into 'main'
fix(admin-ui): 403 без токена → reauth (продолжение MR !267) See merge request 2-6/2-6-4/terravault/ordinis!268
This commit is contained in:
@@ -72,13 +72,22 @@ apiClient.interceptors.request.use((config) => {
|
|||||||
return config
|
return config
|
||||||
})
|
})
|
||||||
|
|
||||||
// Единственный 401 interceptor. Логика silent renew / redirect / loop guard
|
// Auth-related interceptor. 401 классический «нет/невалидный JWT» →
|
||||||
// делегируется handler'у который TokenSync устанавливает через
|
// handler делает silent renew / redirect.
|
||||||
// setUnauthorizedHandler().
|
//
|
||||||
|
// 403 + accessToken=null обрабатывается так же. Корень: на проде
|
||||||
|
// ORDINIS_AUTH_REQUIRED=false → Spring Security пропускает anonymous →
|
||||||
|
// контроллер видит PUBLIC scope → отдаёт 403 (не 401). Это происходит
|
||||||
|
// когда silent-renew падает, oidc-client-ts убирает user, accessToken
|
||||||
|
// зануляется → следующий запрос идёт без Bearer. Без этой ветки юзер
|
||||||
|
// залипал на 403 и видел «forbidden» вместо relogin redirect'а.
|
||||||
apiClient.interceptors.response.use(
|
apiClient.interceptors.response.use(
|
||||||
(resp) => resp,
|
(resp) => resp,
|
||||||
(error) => {
|
(error) => {
|
||||||
if (error?.response?.status === 401 && unauthorizedHandler) {
|
const status = error?.response?.status
|
||||||
|
const needsReauth =
|
||||||
|
status === 401 || (status === 403 && accessToken == null)
|
||||||
|
if (needsReauth && unauthorizedHandler) {
|
||||||
try {
|
try {
|
||||||
unauthorizedHandler(error)
|
unauthorizedHandler(error)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user