【问题标题】:Is it possible to user custom authentication in keystone.js without a keystone user model?是否可以在没有 keystone 用户模型的情况下在 keystone.js 中使用自定义身份验证?
【发布时间】: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 的关键要求)。

【问题讨论】:

    标签: passport.js keystonejs


    【解决方案1】:

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

    我正在针对那个 fork 发出一个拉取请求(我相信它是当前 npm 上的包)。

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

    //标签v3.22的Git补丁 来自 d28dae031252fc2512598ef8496f336f27c1bbc0 2001 年 9 月 17 日星期一 00:00:00 来自:“丹尼尔·B·查普曼” 日期:2016 年 8 月 30 日星期二 09:25:50 -0600 主题:[PATCH] 添加了一个本地 auth 变量,该变量反映了 keystone.get('auth') 配置设置,以便使用 自定义用户对象(如 Passport.js)不会在 由于“登录为”功能,管理页面。

    ---
     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
    

    【讨论】:

    • 作为注释(这是最近投票赞成的)这个补丁被团队拒绝了,所以它应该被归类为 hack。我会把 git-repository 留给任何需要它的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2022-11-02
    • 2019-04-27
    相关资源
    最近更新 更多