如何在 4 小时后仅使用 LocalStorage 自动注销?

How to automatic logout only using LocalStorage after 4 hours?

提问人:Jay0813 提问时间:8/3/2021 最后编辑:Jay0813 更新时间:8/3/2021 访问量:226

问:

我的问题是我不知道在哪里处理自动注销的条件。 我正在使用 localStorage 来保存有关 logged-user 的信息。

在有人登录的那一刻,我将 expiredTime 对象添加到带有用户信息的 localStorage。

expired像这样的时间

if (userEmail.includes(values.email)) {
     if (userPassword.includes(values.password)) {
       let expiredTime = new Date()
       expiredTime.setMinutes(expiredTime.getHours() + 4)
       const loggedUser = users.filter((user) => user.email === values.email)
       const addTimeToUser = {
         logUser: loggedUser,
         expired: expiredTime,
       }
       saveDataToLocalStorage('loggedUser', addTimeToUser)
       history.push('/')
     } else {
       alert('Password is not right.')
     }
} else {
    alert('Email is not right.')
}

移动到“/”url 后,如果 expiredTime 较早,它将被删除

useEffect(() => {
    const data = JSON.parse(localStorage.getItem('loggedUser'))
    // console.log(new Date(data.expired))
    if (new Date(data.expired) < new Date()) {
      localStorage.removeItem('loggedUser')
    }
}, [])

但此方法的问题在于,在刷新后会删除 localStorage 的值。有没有办法在不刷新的情况下删除它?

欢迎任何建议。感谢您回答问题。

JavaScript reactjs 本地存储 注销

评论

1赞 Evert 8/3/2021
你知道这个功能吗?setTimeout
0赞 depperm 8/3/2021
你能试着澄清你要完成什么吗? 在注销用户的上下文中对我来说没有意义。您是否正在尝试重置 localstorage 值?Is there any way to get rid of it without refreshing it?
0赞 Jay0813 8/3/2021
@Evert 这是否意味着在 setTimeout 的第二个参数中放置 4 小时?
0赞 Evert 8/3/2021
@Jay0813是的,您输入了一个与要运行函数的时间相对应的数字。
3赞 Huy Phạm 8/3/2021
您还没有过期时间。在生产环境中,用户可以访问 localStorage 并更改为 forever,而不必再次登录。您可以添加一个功能来检查是否比当前提前 4 小时以上。validateexpireTimeexpireTimeDate

答: 暂无答案