鍍金池/ 問答/Linux  HTML/ 關于koa-router中對指定url進行認證的問題

關于koa-router中對指定url進行認證的問題

思路是這樣的

得到請求url => 判斷是否可以直接訪問(驗證權限) => 得到數據(DONE) or 驗證權限(NEXT) => 無權限(返回403) or 得到數據(DONE)

在vue-router中啟發(fā)到可以設置路由的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()
    }

})
回答
編輯回答
夢一場

中間件不就是干這個的么

2017年6月27日 07:27
編輯回答
臭榴蓮

寫一個中間件在所有的router執(zhí)行之前
如果匹配到需要認證的URL就執(zhí)行認證流程
其余的URL直接yield next/await next()即可。

2018年3月5日 00:37
編輯回答
硬扛

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

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

2017年1月13日 17:21