使用koa-jwt生成并存储token之后如何用于打开新页面?
最近在学习koa写一个小demo,从login用ajax登录验证成功后返回token并且把token存在localstorage,然后自动跳转home,home的koa-route.get路由写在app.use(jwt({secret: config.app.secret}));
后面,然而总是返回‘No Authorization header found’,jwt方式创建的token放在window.localStorage里怎么才能用在一个打开新页面的请求里呢?
以下是部分代码
app.use(route.post('/login', function *() {
// 省略了验证过程
// ...
if (!user) {
this.throw(401, 'Incorrect username.');
} else if (!ps.validatePass(credentials.password, user.password)) {
this.throw(401, 'Incorrect password.');
} else {
user.id = user._id;
delete user._id;
delete user.password;
}
// sign and send the token along with the user info
var token = jwt.sign(user, config.app.secret, {expiresIn: 90 * 24 * 60 * 60 /* 90 days */});
this.body = {token: token, user: user};
}));
app.use(jwt({secret: config.app.secret}));
app.use(route.get('/', function *() {
this.body = 'got u';
}));
如果使用cookie配合session是需要给每个路由增加验证,或者过滤器,使用jwt怎么做到某些页面的非登录状态的屏蔽呢?
我有找到github上一个框架是使用在html文件头部验证是否存在localstorage.user
,并且把这个文件的路由写在koa-jwt外部,如果不存在localStorage.user
就跳转登录页面,但是这种屏蔽是不是太简单了?
<script>
// if user logs in with oauth, user token will be in localStorage so look for it.
var token = window.sessionStorage.token || window.localStorage.token,
user = token && JSON.parse(window.sessionStorage.user || window.localStorage.user);
if (!user || user.exp < Math.round(new Date().getTime() / 1000)) {
window.location.replace('/login');
}
</script>
如果再加客户端到服务器端通信是不是会影响性能?
如果改写成SPA,不修改location跳转,那么储存了token之后直接进入第二页面如何实现?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论