Last major update: 25.08.2020
- Что такое авторизация/аутентификация
- Где хранить токены
- Как ставить куки ?
- Процесс логина
- Процесс рефреш токенов
- Кража токенов/Механизм контроля токенов
import { createStore, Event, sample, Store } from 'effector'; | |
import { once, readonly } from 'patronum'; | |
interface TrackSliceOptions<T extends RouteParams, Route extends EffectorRoute<T> = EffectorRoute<T>> { | |
route: Route, | |
compare: (params: EffectorRouteParams<Route>) => boolean | |
} | |
interface SliceInstance<Params extends RouteParams> { | |
$opened: Store<boolean>, |
/** | |
Реализуйте функцию deepEqual на JavaScript, | |
которая принимает два параметра и проверяет, являются ли они "глубоко" равными. | |
Входные параметры не могут быть объектами типа Set, Map и их Weak-версиями. | |
Функция должна учитывать следующие правила: | |
- Примитивные типы (числа, строки, булевы значения, null, undefined) сравниваются по значению. | |
- Массивы считаются равными, если они имеют одинаковую длину и их элементы попарно равны (в том же порядке). | |
- Объекты считаются равными, если они имеют одинаковый набор ключей и значения по этим ключам попарно равны. |
type MazeNode = '.' | '#'; | |
interface PathNode { | |
x: number, | |
y: number | |
} | |
type Direction = 'top' | 'right' | 'bottom' | 'left'; | |
/** |
import { | |
Event, | |
attach, | |
createEvent, | |
createStore, | |
sample, | |
scopeBind, | |
Store, | |
} from 'effector'; |
import { useContext } from 'react'; | |
import { createStore, createEffect, createEvent, sample, attach, combine, restore } from 'effector'; | |
import { spread, debug, not, and, empty, or } from 'patronum'; | |
import { createGate, useGate } from 'effector-react'; | |
import { | |
useLocation, | |
useNavigate, | |
matchPath, | |
generatePath, | |
RouteMatch, |