В настоящее время у меня есть вызов API токена обновления каждые 60 минут,
Вот мое состояние:
**const expires_in = 3600 //This is 3600s comes from auth api
if (refreshToken && expires_in * 1000 > Date.now() + 3600000) {
// RefreshToken Function
else {
console.info("accessToken not expired yet");
}**
Это условие работает неправильно. Это условие вызывает функцию RefreshToken при каждой перезагрузке, но я хочу вызывать ее каждые 60 минут.
Точно мое условие: звонить каждые 60 минут.
Чтобы это работало, вам также необходимо знать дату и время, когда токен был выпущен.
В настоящее время я использую вызов вызова
Не можете ли вы просто использовать функцию сна или что-то в этом роде?
Пожалуйста, объясните, что именно вы хотите сказать.
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
expires_in * 1000 = 3600000,
Date.now() + 3600000 = 1720672843350 ,
Таким образом, это условие никогда не может быть истинным. Также ваш вариант должен выглядеть так:
const expires_in = 3600 //This is 3600s comes from auth api
if ((refreshToken) && (expires_in * 1000 > Date.now() + 3600000)) {
// RefreshToken Function
}else {
console.info("accessToken not expired yet");
}
В этом случае вы ожидаете, что оба условия будут истинными для выполнения функции. Но вот как я вам сказал: Первое условие никогда не может быть больше второго, а это значит, что вы никогда не сможете выполнить функцию в соответствии с вашим условием. Возможно, вы хотели сказать:
const expires_in = 3600 //This is 3600s comes from auth api
if ((refreshToken) && (expires_in * 1000 + Date.now() > Date.now() + 3600000))
{
// RefreshToken Function
}else {
console.info("accessToken not expired yet");
}
Мой совет — сначала исправить математику и выяснить, каким именно должно быть условие.
Ваше условие — show всегда ложно.
Сначала сохраните эту дату всякий раз, когда вы получаете новый токен доступа.
// This snippet adds 3600 seconds to the current date
const accessTokenTime = new Date();
accessTokenTime.setSeconds(accessTokenTime.getSeconds() + expires_in);
После этого вы можете сравнить две даты. Если accessTokenTime меньше текущего времени, это означает, что 60 минут для accessToken завершены.
if (refreshToken && (accessTokenTime < Date.now()) {
// RefreshToken Function
} else {
console.info("accessToken not expired yet");
}
Пока не работает. Я хочу вызвать API RefreshToken, когда срок действия токена доступа истечет, а время истечения срока действия моего токена доступа составляет один час (60 минут).
Вы добавили первый фрагмент, хотя вначале получили accessToken? Можете ли вы указать значение журнала accessTokenTime
Date.now()
?
Вот объект, который я получаю после успешного входа в систему. { "access_token": "pA6StAHCIW2UdsrkghrMJjpOdHsjkfwJeyRvXviSY", "expires_in": 3600, "token_type": "Bearer", "scope": "каналы Channel_contacts файлы журналы каналов_сообщений", "refresh_token": "78KOriUIAofHGs2LO3bfdHc2L HsdjghjkgwexCis" } Пожалуйста, подскажите, как мне справиться мое состояние токена обновления.
Просто добавьте первый фрагмент после входа в систему, где вы получите этот объект: { "access_token": "pA6StAHCIW2UdsrkghrMJjpOdHsjkfwJeyRvXviSY", "expires_in": 3600, "token_type": "Bearer", "scope": "каналы Channel_contacts файлы журналы каналов_сообщений", " обновить_токен": "78KOriUIAofHGs2LO3bfdHc2LHsdjghjkgwexCis" } И используйте accessTokenTime, где вам нужно проверить, истек срок действия токена доступа или нет.
какой http-пакет вы используете? Аксиос или выборка?