鍍金池/ 問(wèn)答/Linux  HTML/ 關(guān)于koa-router中對(duì)指定url進(jìn)行認(rèn)證的問(wèn)題

關(guān)于koa-router中對(duì)指定url進(jìn)行認(rèn)證的問(wèn)題

思路是這樣的

得到請(qǐng)求url => 判斷是否可以直接訪問(wèn)(驗(yàn)證權(quán)限) => 得到數(shù)據(jù)(DONE) or 驗(yàn)證權(quán)限(NEXT) => 無(wú)權(quán)限(返回403) or 得到數(shù)據(jù)(DONE)

在vue-router中啟發(fā)到可以設(shè)置路由的meta信息

auth: true

就可以知道到這個(gè)url是不是要權(quán)限。

但是看到koa-router并沒(méi)有這樣類似的東西,應(yīng)該要怎么做?


如果是vue-router的思路的話,應(yīng)該像下面這樣的

// 假設(shè) '/' 是需要認(rèn)證
{
    path: '/',
    name: 'index',
    meta:{
        auth: true
    }
}

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

    if ( to.meta.auth === true ){
        // 運(yùn)行認(rèn)證然后next
        
        let miao = await XXX()
        
        if ( miao === 通過(guò) ){
            next()
        }else{
            context.response.status = 403
            return
        }
        
    }else{
        next()
    }

})
回答
編輯回答
夢(mèng)一場(chǎng)

中間件不就是干這個(gè)的么

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

寫一個(gè)中間件在所有的router執(zhí)行之前
如果匹配到需要認(rèn)證的URL就執(zhí)行認(rèn)證流程
其余的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))

如上所示了,將路由按照需認(rèn)證和不需認(rèn)證分類好,要認(rèn)證的路由加一行use來(lái)使用認(rèn)證的方法,將next傳進(jìn)方法里,在auth方法里控制是否運(yùn)行下面路由,不然就返回403

2017年1月13日 17:21