Open stone120 opened 7 years ago
generator
吗?如果defaultCtrl
返回的是一个generator
的话,用await
语法肯定不起作用的;你是拿grace当MVC框架吗? 如果是要做权限校验功能,一般就是显示调用defaultCtrl 的;也可以自定义中间件,但不推荐,因为grace本身是一个多应用的前后端分离框架~
grace作为前端框架 主要功能 就是路由+proxy; 典型的filter功能 就是在路由层控制的把? 请指导一下, 前后端分离框架中, filter一般在哪部分实现, 谢谢
没明白你说的“典型的filter”的功能具体是什么功能呢?是指类似laravel的路由机制,某个路由才注入某个中间件?
比如:spring中通过filter 限制未登录用户不能访问, 实现异常处理 等功能。 进入路由前的过滤功能 / 后台处理后 ,反馈给用户前的 过滤功能
明白了。
目前的做法确实就是你上面提到的:在控制器中显式调用 this.bindDefault()
,然后在defaultCtrl中调用用户是否已登录的接口(前后端分离的框架下),然后根据业务做处理;
说实话,我也在想有没有更优雅的方案,但是要考虑几个使用场景:
如果有好的建议的话,可以提出来
目前我在使用过程中,做路由限制的方式如下 不知道是否有更合适的想法,现在的登陆是做到cookie中的(跳到第三方登陆界面,存放cookie)
// defaultCtrl.js
module.exports = async function(auth){
// vip权限
if(auth=='vip'){
// 验证cookies中的vip账号
let vipid = this.cookies.get('baiduId')
// 发送验证接口到内网
this.proxy(`接口?id=${vipid}`)
// 验证返回数据是否满足需要 不是则重定向到登陆
if( not ) this.redirect('/login')
}
// 别的权限同理 如admin权限等
}
// 具体路由如个人中心 center.js
exports.home = async function(){
await this.bindDefault('user')
// 余下则是业务代码...
}
@evanzlj 没怎么看明白问题,是说,是要实现登录用户的权限系统吗?这样的情况,可以让后端提供一个获取用户信息的接口;然后在defaultCtrl里直接调用接口,根据用户的情况进行判断。
另外,关于proxy看你上面写的有两个问题:
baiduId
的cookie,然后通过get参数发出去,你可以直接proxy这个接口,cookie信息会自动带过去;this.proxy
方法记得通过await
语法执行,await this.proxy(...)
1.是用來當作filter使用嗎? 需要在每個controller的方法中 調用 yield bindDefault() , 不太方便。
2.以下這種寫法 調用不到 bindDefault() 方法。 exports.index_1 = async function () { await this.bindDefault(); }