关于koa-router中对指定url进行认证的问题

发布于 2022-09-07 07:38:35 字数 751 浏览 20 评论 0

思路是这样的

得到请求url => 判断是否可以直接访问(验证权限) => 得到数据(DONE) or 验证权限(NEXT) => 无权限(返回403) or 得到数据(DONE)

在vue-router中启发到可以设置路由的meta信息

auth: true

就可以知道到这个url是不是要权限。

但是看到koa-router并没有这样类似的东西,应该要怎么做?


如果是vue-router的思路的话,应该像下面这样的

// 假设 '/' 是需要认证
{
    path: '/',
    name: 'index',
    meta:{
        auth: true
    }
}

router.beforeEach((to, from, next) => {

    if ( to.meta.auth === true ){
        // 运行认证然后next
        
        let miao = await XXX()
        
        if ( miao === 通过 ){
            next()
        }else{
            context.response.status = 403
            return
        }
        
    }else{
        next()
    }

})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

远昼 2022-09-14 07:38:35

自己答一下吧,找到方法了。

router
    .('/userName', async context => await user.getName(context))

router
    .use(async (context, next) => await user.auth(context, next))

    .get('/userdata', async context => await user.getData(context))

如上所示了,将路由按照需认证和不需认证分类好,要认证的路由加一行use来使用认证的方法,将next传进方法里,在auth方法里控制是否运行下面路由,不然就返回403

梦幻之岛 2022-09-14 07:38:35

中间件不就是干这个的么

苏大泽ㄣ 2022-09-14 07:38:35

写一个中间件在所有的router执行之前
如果匹配到需要认证的URL就执行认证流程
其余的URL直接yield next/await next()即可。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文