【发布时间】:2017-01-06 00:46:05
【问题描述】:
我有一个(我希望)关于 Keystone 中的授权的快速问题:似乎“用户”对象是框架中的核心依赖项。我想完全避开它,但没有它似乎没有办法让应用程序正常工作。
我在这里运行了一个基本的绕过:
keystone.init({
//...
'auth': (req, res, next)=>{
if(Roles.has(Roles.Admin, Roles.Keyston)){
next();
} else {
throw "403"; //Terminate
}
},
'user model': 'User',
//...
})
结果:
Sorry, an error occurred loading the page (500)
snip\KS2\node_modules\keystone\templates\layout\base.jade:80
> 79| a(href='/keystone/' + User.path + '/' + user.id)= User.getDocumentName(user)
80| | .
81|
82| //- Common
item.get is not a function
因此,它期望用户对象存在于请求中(即使我使用的是我自己的身份验证方法)。如果我完全禁用身份验证,它似乎很好,我可以使用一些中间件保护路由,但这似乎是相当有问题的行为。
“用户”对象实际上是框架中的一个依赖项还是为了方便起见?移除模型
//'user model' : 'User'
崩溃 Keystone
Sorry, an error occurred loading the page (500) Unknown keystone list undefined).
我相当确定前一个错误与请求中的“用户对象”有关,该请求被设置为一些愚蠢的东西,因此 Jade 模板爆炸了。是否可以将此用户对象与框架分离?如果不是,是否可以设置此对象以便我可以继续使用passport.js 进行主要身份验证?
我对这个主题特别感兴趣,因为我想在 Keystone.js 管理模块中实现基于角色的身份验证,并且没有更多关于它是如何工作的信息/解决方法的想法,我没有一个起点。
(**EDIT 即使 auth 设置为 false,错误仍然存在)
Sorry, an error occurred loading the page (500)
...snip\KS2\node_modules\keystone\templates\layout\base.jade:78
76| if User && user
77| | Signed in as
> 78| a(href='/keystone/' + User.path + '/' + user.id)= User.getDocumentName(user)
79| | .
80|
81| //- Common
item.get is not a function
即使使用 auth: false 也会退出,因为我有一个“用户”对象,该对象变为 null 并导致模板崩溃。
编辑#2 我创建了一个补丁,解决了关闭用户身份验证时的崩溃问题,它并没有真正回答问题,但它使应用程序再次可用,而无需依赖 Keystone.js 进行身份验证(这是此 CMS 的关键要求)。
【问题讨论】: