Китикет
Так все же просто: есть ярн-лок, а есть пэкедж-лок, зависит от пакетного менеджера
Access denied
Правда node-sass через npm не ставится и поставил через ярн
Access denied
Vadim
А где кеш лежит?
загугли как это делается
Oleg
это нормально, что useReducer мутирует initial state? делал просто dispatch resetAll, возвращал ...initialState, получил изменения.
Vadim
видимо сам как-то мутируешь
Vadim
и зачем вообще делать ...?
Vadim
достаточно просто вернуть initialState
Anonymous
нужно перед тем как откроется компонент через Route сделать запрос на сервер и получить флаг isLogged, если он false — сделать редирект на другую страницу. использую такую конструкцию, но она работает только при рендере самого роутинга <Route {...also} render={props => (isLogged === true ? <Component {...props} /> : <Redirect to="/login" />)} />
Ilya
А разве версия пакета не ограничивается package.json?
версию пакетов можно ограничинить но ты не можешь ограничить версию внутрених зависиомтей. Поччитай про lock файлы и зачем их сделали
Китикет
А isAuthorized (isLogged) должен быть в стейт менеджере или в подобном месте
Anonymous
Читай про private route
я только что скинул код private route
Anonymous
аля админ и модер
Ilya
А зачем вообще создавать роут если пользователь не залогинен?
например чтобы можно было редерекнуть на логин
Andrey
я только что скинул код private route
такое лучше решать не через роуты, а в хендлере сайдэффекта, когда спрашиваешь, залогинен ли пользователь
Andrey
я только что скинул код private route
а когда рендеришь роуты, можешь пассить флаг туда типа private и по нему делать или не делать запрос на сервер
Anonymous
суть в том, что чтобы мне понять верный ли токен, мне на каждом privateRouter нужно делать запрос
Anonymous
когда стр загружается — она больше не перерендеривается, соответственно и запрос не делается
Anonymous
раньше в реакт роуте была функция, но она теперь не работает
Anonymous
ьебе можно один раз его проверить
представь человек зашел на сайт и оставил комп открытым на сутки — столько токен длиться
Andrey
и?
Anonymous
и?
если я сделаю в самом начале запрос на isLogged
Rustam
Он все равно не сможет к апишке запросы сделать, какая разница что у него показывается
Andrey
если я сделаю в самом начале запрос на isLogged
есть рефрештокен есть интерцепторы, которые 401 поймают
Anonymous
Он все равно не сможет к апишке запросы сделать, какая разница что у него показывается
зачем показывать то, что ему не нужно видеть, к тому же у меня стоит refresh токен
Китикет
Ну ты покажешь ему, а после этого через секунду токен истечет
Китикет
Что делать будем?
Китикет
Обратно разрендеривать?
Anonymous
я уверен, реализация того что я хочу сделать занимает не много кода
Andrey
зачем показывать то, что ему не нужно видеть, к тому же у меня стоит refresh токен
так лол, какая разница, узнает он об этом с перейдя на роут, или до этого
Китикет
Хаах
Andrey
Andrey
это не задача роутинга
Andrey
это часть бизнеслогики
Китикет
Просто ты какой-то запрос хочешь посылать в роуте, это дичь
Anonymous
задача роутинга проверить токен и пустить на страницу
Китикет
Этим должна логика заниматься, которая куда выше лежит
Andrey
задача роутинга проверить токен и пустить на страницу
задача роутинга сматчить адрес из браузера с регекспом подсунутым
Китикет
Роутинг лишь получает флаг, авторизован пользователь или нет
Китикет
И все
Китикет
Или роль, если это надо
Anonymous
задача роутинга сматчить адрес из браузера с регекспом подсунутым
зайди на какой-то норальный сайт, удали токен и попробуй перейти на стр — тебя сразу закинет на логин
Daniil
и зачем так делать дефолт юзеру?
Andrey
зайди на какой-то норальный сайт, удали токен и попробуй перейти на стр — тебя сразу закинет на логин
потому что будет запрос на бек первым делом, а не потому что в роутах запросы хуярят
Rustam
Потому что там на каждой странице есть запросы к апишке
Rustam
Придет запрос к апишке, ответ 401 ставишь стейт не авторизован и на стр авторизации кидаешь
Anonymous
зачем мне писать логику, которая будет работать как перехватчик ерроров 401 в каких-то несвязанных функциях и логике, если я могу прописать это логику в роутинге один раз для всего?
Rustam
В аксиосе вешаешь общий обработчик ошибок на все запросы, диспатчишь экшен и там дальше пошло
Rustam
В одном месте будет логика
Rustam
Там где роутер подписываешься на это состояние и убираешь недоступные роуты
Rustam
Я не говорю что так правильно, один из подходов
Rustam
На то и реакт библиотека, никто тебе не диктует как делать правильно
Anonymous
я конечно благодарен за столь большой фидбек касательно реализации хендла ошибки 401
Anonymous
с этим у меня проблем нет
Anonymous
вопрос все равно открытый
Rustam
Ну сделай тогда обёртку над роутом, общую и в нее пихай этот запрос
Rustam
Если тебе так нужно
Rustam
Ты же не будешь у каждого роута писать такую лабуду
Anonymous
вопрос открыт: const isLogged = store.token !== null; return ( <Route {...also} render={props => (isLogged ? <Component {...props} /> : <Redirect to="/login" />)} /> ); при первой заходе на роут — идет редирект, в следующем случае компонент не рендерится
Andrey
вопрос все равно открытый
ты не тот вопрос открываешь) впрочем, не буду отнимать возможности погулять по граблям, если не хочешь делать нормально до этого надо дойти, понимаю)
Bogdan
подскажите, как стайледы типизировать? именно ф-ю
Китикет
Ты хочешь чтобы при гулянии по страницам у тебя были мини-загрузки во время запроса на сервер для проверки токена?)
Ну ты можешь такое удовольствие поиспытывать, а потом как-нибудь придешь к правильной реализации
Китикет
мне нужен редирект на логин, если человек не вошел
Отлично, флаг isAuthorized равен false, делаем редирект
Anonymous
Отлично, флаг isAuthorized равен false, делаем редирект
редирект работает при первой загрузке
Bogdan
в доке есть раздел про это
вот как там const Title = styled.h1<TitleProps>` не работает