【发布时间】:2017-12-12 10:31:49
【问题描述】:
当他/她单击注销按钮时,用户可以自己注销,但如果令牌过期,他/她无法注销,因为在我的应用程序中,令牌用于服务器端和前端。当用户单击注销按钮时,如果令牌有效,则清除来自服务器和浏览器的令牌。当用户没有注销并且他/她的令牌过期但没有在浏览器中被清除时,可能会出现这种情况。为了解决这种情况,我如何在每次用户访问我的应用时检查令牌是否过期,如果令牌过期,请从浏览器中清除令牌?
我在 saga 中尝试过,每次用户刷新页面或切换到另一个页面时,它都会在后台观看。我不认为这是一种有效的方法。我认为中间件会起作用。
function* loadInitialActions() {
var dateNow = new Date();
console.log(jwtDecode(token).exp < dateNow.getTime() - jwtDecode(token).iat);
const token =
JSON.parse(localStorage.getItem("user")) &&
JSON.parse(localStorage.getItem("user"))["token"];
if (
token &&
jwtDecode(token).exp < dateNow.getTime() - jwtDecode(token).iat
) {
yield put(LOGOUT_SUCCESS);
}
}
function* initialize() {
const watcher = yield fork(loadInitialActions);
yield take([INITIALIZE_ERROR, INITIALIZE_SUCCESS]);
yield cancel(watcher);
}
function* rootSaga() {
console.log("rootSaga");
yield takeLatest(INITIALIZE, initialize);
}
所以我的问题是如果令牌从中间件过期,我该如何使用令牌过期逻辑和注销用户?
【问题讨论】:
标签: javascript reactjs redux jwt redux-saga