Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在jwt令牌过期后自动创建它_Reactjs_Redux - Fatal编程技术网

Reactjs 如何在jwt令牌过期后自动创建它

Reactjs 如何在jwt令牌过期后自动创建它,reactjs,redux,Reactjs,Redux,创建jwt访问令牌后,我会将其存储在localstorage中,然后在任何地方使用它。这里我面临的问题是,一旦jwt令牌过期,我就无法搜索。所以我想一旦jwt令牌过期,它应该自动创建。应该怎么做呢。谢谢这里有一个可能的解决方案-一个简单的redux中间件,它将刷新即将过期的现有未过期令牌 它使用库并假设存在执行实际续订的renewartoken函数 有关更多详细信息,请参见代码中的注释 从“jwt decode”导入jwtDecode 从authManager导入{RenewatToken} /

创建jwt访问令牌后,我会将其存储在localstorage中,然后在任何地方使用它。这里我面临的问题是,一旦jwt令牌过期,我就无法搜索。所以我想一旦jwt令牌过期,它应该自动创建。应该怎么做呢。谢谢

这里有一个可能的解决方案-一个简单的redux中间件,它将刷新即将过期的现有未过期令牌

它使用库并假设存在执行实际续订的
renewartoken
函数

有关更多详细信息,请参见代码中的注释

从“jwt decode”导入jwtDecode
从authManager导入{RenewatToken}
//如果到期时间少于此时间(以秒为单位)-请续订令牌
常数到期\阈值=600
//到期检查之间的毫秒
//应长于请求新令牌成功/失败所需的时间
//这就是我们如何避免多个令牌请求的方法
常数检查间隔=10000
//上次检查令牌是否过期的时间戳
让lastCheckTs=-CHECK\u间隔
/**
*获取id_令牌过期之前的时间(秒)。
*负值表示它已过期(或不存在)
*/
函数getTimeExpiry(键){
设jwt=localStorage.getItem(键)
if(jwt){
让jwtExp=jwtDecode(jwt).exp
让expiryDate=新日期(0)
expireydate.setUTCSeconds(jwtExp)
返回Math.floor((expireydate.getTime()-Date.now())/1000)
}
返回-1
}
导出默认存储=>next=>action=>{
const now=Date.now()
如果(现在-上次检查<检查间隔){
//我们最近检查过了,继续吧
返回下一步(操作)
}
lastCheckTs=现在
const-timeToExpire=getTimeToExpiry('id\u-token')
//这个中间件只关心保持有效会话的活动性。
//如果现有令牌已过时或不存在-
//什么都不做,让应用程序的其他部分来处理
//获取全新的有效令牌(如提示用户登录)
//如果现有令牌有很长的到期时间-在下一次检查之前不执行任何操作
//但是,如果现有令牌有效但即将过期,请尝试续订它。
if(timeToExpire>0&&timeToExpire
可能会在每次用户交互时检查到期时间(如已调度的操作或更改的路由),如果到期时间太近,请续订JWT。这样,如果用户长时间没有交互,令牌将过期,这是可以接受的。感谢您的回复。实际上,我正在检查action creator的访问令牌是否过期,但问题是我正在调用某个事件的action creator。意味着我需要执行任何事件来检查错误。我为创建jwt令牌保留了单独的action creator。我不能把一个动作创造者称为另一个动作创造者。请引导我通过。谢谢。我会尝试这样做。