使用koa-jwt生成并存储token之后如何用于打开新页面?

发布于 2022-09-02 15:02:58 字数 1732 浏览 17 评论 0

最近在学习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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文