obabichev / react-token-auth

84 stars 22 forks source link

The 'listener' function makes the dependencies of useEffect Hook change on every render. #5

Closed UseMuse closed 4 years ago

UseMuse commented 4 years ago

The 'listener' function makes the dependencies of useEffect Hook change on every render. Move it inside the useEffect callback. Alternatively, wrap the 'listener' definition into its own useCallback() Hook react-hooks/exhaustive-deps

UseMuse commented 4 years ago

This warn in AuthProvider. Такие пироги

obabichev commented 4 years ago

Thank you for the notice)

If you make PR with the fix I will be happy, in another case, I will fix a bit later)

Жизнь вообще тяжелая штука.

UseMuse commented 4 years ago

6

UseMuse commented 4 years ago

помогите разобраться с работой хука useAuth. Я авторизовался

использую Route из вашего примера

const Router = () => {
    const [logged] = useAuth();

    return <BrowserRouter>
        <Switch>
            {!logged && <>
                <Route path="/register" component={Register}/>
                <Route path="/login" component={Login}/>
                <Redirect to="/login"/>
            </>}
            {logged && <>
                <Route path="/dashboard" component={Dashboard} exact/>
                <Redirect to="/dashboard"/>
            </>}
        </Switch>
    </BrowserRouter>;
};

Иду в localStorage и удаляю токен, пытаюсь перейти к dashboard который доступен только для авторизованного, и я успешно получаю доступ, хотя по факту, токена нет - что должно интерпретироваться пользователь не залогинен.

Разместив логи внутри isLoggedIn, я наблюдаю то, что privateToken не пустой, и равен тому значению которое я удалил руками из localStorage.

Как сделать так, чтобы это заработало?

UseMuse commented 4 years ago

Нужен метод получения токена прямиком из localStorage, каждый раз когда вызывается метод, сейчас же в коде у вас, присваивание privateToken равен значению из localStorage выполняется 1 раз, когда создаётся экземпляр createTokenProvider, все дальнейшие обращения к privateToken используют данные которые получены первоначально...может так это и задумывалось. Но мне увы не совсем подходит

UseMuse commented 4 years ago

Прошу прощения что не оформил в другом "вопросе"

UseMuse commented 4 years ago

Добавил PR

obabichev commented 4 years ago
Иду в localStorage и удаляю токен, пытаюсь перейти к dashboard который доступен только для авторизованного, и я успешно получаю доступ, хотя по факту, токена нет - что должно интерпретироваться пользователь не залогинен.

Если ты получал ошибку без перезагрузки страницы, то все логично)

UseMuse commented 4 years ago

Нет, ошибок в консоли нет, я без токена в localStorage продолжаю получать доступ к приватной странице по скольку хук возвращает true = что значит что я залогинен, а залогинен я потому что данные о токене закешированы

obabichev commented 4 years ago

Исправлено в версии 1.1.7 Если будут проблемы, можно переоткрыть issue или создать новое