【发布时间】:2017-12-23 18:51:32
【问题描述】:
我能够通过连接到 express API 的服务在 Angular 4 中创建登录组件。后端 API 返回一个 JWT 令牌,前端将令牌存储在本地存储中。问题是,令牌在后端过期,但本地存储令牌仍然存在。
在整个前端应用程序中,我检查用户是否已登录,如果已登录,则会显示不同的功能。如果令牌在后端过期,用户仍然可以尝试完成登录行为,因为令牌仍然存在于本地存储中,但服务器端不会允许这种情况发生。我想做的是定期检查服务器端的令牌以查看它是否已过期,每次我检查是否应根据this SO answer 启用仅登录功能之一时/p>
快递服务器路由似乎在 Postman 中运行良好(localhost:3000/users/token?token=veryLongTokenString):
// check for expired token
router.get('/token',function(req,res,next){
"use strict";
jwt.verify(req.query.token, 'secret', function(err){
if (err) {
return res.status(403).json({
title: 'There is no valid token',
status: res.statusCode,
error: err
})
}
res.status(200).json({
message: 'Token is valid',
token: token,
userId: user._id
})
})
})
这就是我开始感到困惑的地方。我对 observables 的微弱掌握告诉我,我在服务 (auth.service.ts) 中返回了 .map:
isLoggedIn() {
const token = localStorage.getItem('token')
? '?token=' + localStorage.getItem('token')
: '';
return this.http.get('/users/token' + token)
.map( response => response.json())
}
并通过.subscribe收听我的组件
isLoggedIn() {
return this.authService.isLoggedIn()
.subscribe(x => {
console.log(x)
// if status is 200 then return true
// if not then remove token from local storage?
})
}
此时它会返回一个 403 错误,但它会重复执行此操作,每分钟会累积数千个 403 错误。我猜我不应该使用.map/.subscribe 方法,而应该使用只检查一次的方法?
【问题讨论】:
标签: angular jwt mean-stack