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

思路是这样的

得到请求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()
    }

})
阅读 4.6k
3 个回答

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

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

中间件不就是干这个的么

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题