用户单击注销按钮时可以注销自己,但如果令牌已过期,则他/她将无法注销,因为在我的应用程序中,服务器端和前端都使用了令牌。当用户单击注销按钮时,如果令牌有效,则会清除来自服务器和浏览器的令牌。当用户未注销并且其令牌过期但未在浏览器中清除时,很有可能会出现。为了解决这种情况,我如何在用户每次访问我的应用程序时检查令牌是否到期,因此,如果令牌已过期,请从浏览器中清除令牌?
我尝试过在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);
}
所以我的问题是,如果令牌从中间件过期,我该如何使用令牌到期逻辑和注销用户?
在我看来,中间件将是最佳选择。
你可以做这样的事情
const checkTokenExpirationMiddleware = store => next => action => {
const token =
JSON.parse(localStorage.getItem("user")) &&
JSON.parse(localStorage.getItem("user"))["token"];
if (jwtDecode(token).exp < Date.now() / 1000) {
next(action);
localStorage.clear();
}
next(action);
};
然后您必须将其包装 applyMiddleware
问题内容: 我在hapijs中使用jwt插件和策略。 我可以在登录用户时创建jwt令牌,并通过’jwt’策略使用同一令牌对其他API进行身份验证。 我将令牌设置为cookie,其中是令牌名称。另外,我没有将这些令牌保存在数据库中。 但是,注销时如何销毁jwt令牌? 请提出一种方法。 问题答案: JWT存储在浏览器中,因此删除令牌以删除客户端的cookie 如果您还需要在令牌到期之前从服务器端使令牌
当我想要注销时,我调用以下代码: 怎么修?
嗨,我正在创建使用 REST API endpoint与服务器端通信的移动本机应用程序。 我以前有开发本机客户端的经验,但我将简单的令牌(随机生成的字符串)存储在存储用户信息的同一表中的数据库中。所以它就像浏览器中使用的会话,但每个请求的标头中都有令牌,而不是 cookie。 最近我发现了JWT令牌。这似乎是保护私有endpoint的好方法。您可以从移动客户端请求令牌,前提是您通过登录并获得生成的
我第一次获取FCM并将其保存到我的用户默认值。现在当用户注销时,我如何再次刷新FCM令牌?我搜索了文档和许多其他问题,但没有找到更好的解决方案。 提前谢谢。
这个问题以前被问过很多次,也被回答过很多次,但是我不知道我做错了什么。从Firebase控制台向整个应用程序发送通知可以正常工作,但如果我向单个令牌发送通知,则Firebase控制台会出现错误:"Firebase注册令牌无效。检查令牌格式” 我正在Iphone设备上测试该应用程序。 已在创建新密钥https://developer.apple.com/account/ios/authkey/ 下载
对于身份验证,目前我们使用JWT,因此一旦创建了令牌,它就会在整个生命周期内创建,如果我们设置了时间过期,令牌将过期。 有没有办法使令牌过期? 单击注销按钮时,我需要销毁令牌。 我正在使用ASP. NET Core WebAPI。