#reactjs #jwt
#reactjs #jwt
Вопрос:
Я новичок в Reactjs и хотел бы знать, как мы проверяем token.expiry и выходим из системы, когда срок действия токена истек?
jwt.sign(payload, process.env.jwtSecret, { expiresIn: "60000" });
//for testing purporse, the token is set to be expired after 60000s = 1min
const isTokenExpired = () => {
try {
const decoded = decode(localStorage.getItem("token"));
if (decoded.exp < (new Date().getTime() 1) / 1000) {
return false;
} else {
history.push("/");
}
} catch (err) {
console.log(err.message);
}
};
//my code to check whether the token is expired
//when i console.log(decoded.exp, it is a chunk of number, what does it mean?)
как мне проверять каждые 1 минуту, истек ли срок действия моего токена?
если срок действия токена истек, выйдите из системы пользователя; если срок действия токена не истек, продолжайте;
Комментарии:
1. Вам необходимо использовать метод setInterval Javascript либо в вашем Redux, Content, либо в любом другом инструменте управления состоянием, который вы используете.
2. Привет, @MubashirEbad! Если я установлю, что срок действия токена истекает через 30 минут, смогу ли я установить интервал для каждых 30 минут, используя перехватчики реакции, чтобы проверить, истек ли срок действия токена? И где я должен разместить метод isTokenExpired, чтобы убедиться, что он проверяет, где приземлился пользователь?
3. Да, вы можете добавить определенный интервал времени в метод setInterval в JavaScript. Это зависит от того, есть ли у вас верхняя панель, которая есть на всех страницах, вы можете определить ее там. Если вы используете ContextAPIs, вы также можете определить там метод с помощью React.useEffect(() => {})
4. Привет! У меня есть index.js в нем хранятся все маршруты для страниц! Поэтому мне придется поместить здесь метод, чтобы каждые 30 минут проверять, истек ли срок действия токена, если да, то я удаляю токен из локального хранилища! Поправьте меня, если я ошибаюсь!
5. Да, это верно.
Ответ №1:
Да, вы можете добавить определенный интервал времени в метод setInterval в JavaScript. Это зависит от того, есть ли у вас верхняя панель, которая есть на всех страницах, вы можете определить ее там. Если вы используете ContextAPIs, вы также можете определить там метод с помощью React.useEffect(() => {}). Вы также можете определить его в index.js файл в корне.
Ответ №2:
Вы могли бы использовать jwt.verify
, например, так:
jwt.verify(token, process.env.jwtSecret, function(err, decoded) {
if (err) {
//err.name = 'TokenExpiredError, message: jwt expired, expiredAt: <time>
logout()
}
}
Когда вы console.log
(decoded.exp) это дает вам время, прошедшее с 1 января 1970 года 00:00:00 UTC.
Чтобы проверить, нужно ли пользователю выходить из системы, вы можете сначала сбрасывать время истечения срока действия каждый раз, когда получаете запрос. Затем по истечении этого времени вы можете выйти из системы пользователя. Поскольку вы проверяете, истек ли срок действия токена, в этом не должно быть необходимости. Возможно, я ошибаюсь, поэтому приветствую комментарии.
Комментарии:
1. Привет! Где я должен разместить этот метод, чтобы гарантировать, что этот метод? это серверная часть или интерфейс?
2. Эй, это должно быть в серверной части. В файле вашего сервера.