fix(#274): fix logout for auth users

pull/70/head
Andrei Dekterev 3 years ago
parent d5adc2cd7e
commit 6d88197ac3
  1. 12
      src/features/AuthStore/hooks/useAuth.tsx
  2. 7
      src/helpers/callApi/logoutIfUnauthorized.tsx

@ -89,8 +89,9 @@ export const useAuth = () => {
if (!readToken()) { if (!readToken()) {
const token = await getTemporaryToken() const token = await getTemporaryToken()
token && await fetchUserInfo() token && await fetchUserInfo()
return Promise.resolve()
} }
return Promise.resolve() return Promise.reject()
} }
storeUser(loadedUser) storeUser(loadedUser)
@ -204,21 +205,24 @@ export const useAuth = () => {
}, [reChekNewDevice, userManager]) }, [reChekNewDevice, userManager])
useEffect(() => { useEffect(() => {
if (!needCheckNewDeviсe) return undefined if (!needCheckNewDeviсe && !user) return undefined
const startCheckDevice = setInterval(checkNewDevice, 20000) const startCheckDevice = setInterval(checkNewDevice, 20000)
isNewDeviceLogin && clearInterval(startCheckDevice) isNewDeviceLogin && clearInterval(startCheckDevice)
return () => clearInterval(startCheckDevice) return () => clearInterval(startCheckDevice)
}, [checkNewDevice,
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [
checkNewDevice,
isNewDeviceLogin, isNewDeviceLogin,
setIsNewDeviceLogin, setIsNewDeviceLogin,
]) ])
useEffect(() => { useEffect(() => {
// попытаемся обновить токен используя refresh_token
const tryRenewToken = () => { const tryRenewToken = () => {
userManager.signinSilent() userManager.signinSilent()
.catch(() => user && logout()) .catch(() => user && logout())
} }
// попытаемся обновить токен используя refresh_token
// если запросы вернули 401 | 403 // если запросы вернули 401 | 403
window.addEventListener('FORBIDDEN_REQUEST', tryRenewToken) window.addEventListener('FORBIDDEN_REQUEST', tryRenewToken)

@ -1,8 +1,9 @@
export const logoutIfUnauthorized = async (response: Response) => { export const logoutIfUnauthorized = async (response: Response) => {
/* отключили из-за доступа без авторизации */ /* отключили из-за доступа без авторизации */
if (response.status === 401 || response.status === 403) { // if (response.status === 401 || response.status === 403) {
window.dispatchEvent(new Event('FORBIDDEN_REQUEST')) // removeToken()
} // window.dispatchEvent(new Event('FORBIDDEN_REQUEST'))
// }
const error = new Error(response.statusText) const error = new Error(response.statusText)
// eslint-disable-next-line no-console // eslint-disable-next-line no-console

Loading…
Cancel
Save