在没有keystone用户模型的情况下,是否可以在keystone.js中使用自定义身份验证?

时间:2016-08-29 21:29:22

标签: passport.js keystonejs

我有一个(我希望)关于Keystone中授权的快速问题:看起来“User”对象是框架中的核心依赖。我想完全支持它,但似乎没有办法让应用程序在没有它的情况下运行。

我在这里运行了一个基本的旁路:

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模板爆炸了。是否可以将此User对象与框架分离?如果不是,是否可以设置此对象以便我可以继续使用passport.js进行主要身份验证?

我对这个主题特别感兴趣,因为我想在Keystone.js管理模块中实现基于角色的身份验证,而没有关于它如何工作/解决方法的更多信息我没有跳跃点。

(**编辑即使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也会退出,因为我有一个“用户”对象,该对象变为空并使模板崩溃。

编辑#2 我已经创建了一个解决了用户身份验证关闭时崩溃的补丁,它并没有真正回答问题,但它使应用程序再次可用,而不依赖于Keystone.js进行身份验证(这是此CMS的一个关键要求) )。

1 个答案:

答案 0 :(得分:4)

我仍然在寻求帮助,但这是我暂时绕过它的方式。看起来应用程序正朝着管理控制台的全新方向发展。

我正在发出针对该分叉的拉取请求(我认为这是当前npm的封装)。

你可以在这里查看我的分叉: https://github.com/danielbchapman/keystone/commit/d28dae031252fc2512598ef8496f336f27c1bbc0

// Git Patch for tag v3.22     来自d28dae031252fc2512598ef8496f336f27c1bbc0 2001年9月17日00:00:00     来自:“Daniel B. Chapman”     日期:2016年8月30日星期二09:25:50 -0600     主题:[PATCH]添加了一个镜像的本地auth变量      keystone.get('auth')配置设置,以便使用的应用程序      自定义用户对象(如Passport.js)不会触发崩溃      由于“登录为”功能而导致的adiministration页面。

---
 lib/core/render.js         | 1 +
 templates/layout/base.jade | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/core/render.js b/lib/core/render.js
index 5d80453..2b03b7f 100644
--- a/lib/core/render.js
+++ b/lib/core/render.js
@@ -59,6 +59,7 @@ function render(req, res, view, ext) {
        moment: moment,
        numeral: numeral,
        env: keystone.get('env'),
+       auth: keystone.get('auth'),
        brand: keystone.get('brand'),
        appversion : keystone.get('appversion'),
        nav: keystone.nav,
diff --git a/templates/layout/base.jade b/templates/layout/base.jade
index 1caee5e..95639c6 100644
--- a/templates/layout/base.jade
+++ b/templates/layout/base.jade
@@ -73,7 +73,7 @@ html
        #footer: .container
            p   #{brand} #{appversion} 
                | Powered by <a href="http://keystonejs.com" target="_blank">KeystoneJS</a> version #{version}.
-               if User && user
+               if User && user && auth
                    |  Signed in as 
                    a(href='/keystone/' + User.path + '/' + user.id)= User.getDocumentName(user)
                    | .
-- 
1.9.5.msysgit.0
相关问题