Добрый день.
Пишу тестовое задание по react. Приложение представляет kanban доску, аналог trello.com, содержит несколько досок и карточки, который можно перетаскивать с доски на доску, и менять их порядок.
Но у меня нет опыта работы с JWT. Я никак не могу понять алгоритм действий. У меня всего две страницы - авторизация и собственно страница с досками.
Помимо API запросов для работы с карточками(с ними я разобрался) есть три запроса связанные с пользователем.
Первый запрос это создание пользователя:
Create user
Recieve data, create new user and return it. Also generate and return JWT token that can be used for authenticated requests
Запрос:
{
"username": "string",
"email": "user@example.com",
"password": "string"
}
Ответ:
{
"username": "string",
"email": "user@example.com",
"password": "string",
"token": "string"
}
Здесь, как я предполагаю, я получаю JWT token
Второй запрос на авторизацию:
Obtain JWT token
Receives data, return token that can be used for authenticated requests
Запрос:
{
"username": "string",
"password": "string"
}
Ответ:
{
"username": "string",
"token": "string"
}
И третий запрос, самый не понятный для меня:
Refreshed JWT token
Receives data adn returns a refreshed token (with new expiration) based on existing token. If 'orig_iat' field (original issued-at-time) is found, will first check if it's within expiration window, then copy it to the new token
Запрос:
{
"token": "string"
}
Ответ:
{
"token": "string"
}
Теперь вопросы, что именно я не могу понять.
Я знаю, что токен JWTкороткоживущий и многоразовый и используется для получения доступа к ресурсам, а Refreshed Token(RT) - долгоживущий, но одноразовый. При регистрации мы получаем JWT и с ним уже можно получить доступ к ресурсам API?
При авторизации мы получаем такой же тип JWT?
Как я понял, токен имеет строк жизни. Как узнать это время?
Как держать состояние (авторизован или нет) в приложении?
Я читал что токен можно хранить в LocalStorage. Есть ли смысл создавать переменную в state isAuth которая будет хранить состояние tru/false?
Как я понял, необходимо при загрузке любой страницы запрашивать состояние токена, не истекло ли его время. Для этого и нужен запрос Refreshed JWT token, который возвращает новую пару JWT + RT?
При каждом запросе, при работе с карточками необходимо делать предварительный запрос на проверку не протух ли токен?
Буду признателен за помощь.