是否可以在没有 keystone 用户模型的情况下在 keystone.js 中进行用户自定义身份验证?
Is it possible to user custom authentication in keystone.js without a keystone user model?
我有一个(我希望)关于 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" 对象实际上是框架中的依赖项还是基本上是为了方便?删除模型
//'user model' : 'User'
使 Keystone 崩溃
Sorry, an error occurred loading the page (500) Unknown keystone list undefined).
我相当确定前一个错误与请求中的 "User Object" 设置为一些愚蠢的东西有关,因此 Jade 模板崩溃了。是否可以将此 User 对象与框架分离?如果不能,是否可以设置此对象,以便我可以继续使用 passport.js
进行主要身份验证?
我对这个主题特别感兴趣,因为我想在 Keystone.js 管理模块中实施基于角色的身份验证,但没有更多关于此 works/ideas 解决方法的信息,我不知道有一个起点。
(**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
也退出,因为我有一个 "user" 对象,该对象变为 null 并使模板崩溃。
编辑#2
我已经创建了一个补丁来解决关闭用户身份验证时的崩溃问题,它并没有真正回答问题,但它使应用程序再次可用而无需依赖 Keystone.js 进行身份验证(这是一个关键要求这个内容管理系统)。
我仍在寻求这方面的帮助,但这是我暂时绕过它的方法。应用程序似乎正朝着管理控制台的全新方向发展。
我正在针对该分支发出拉取请求(我认为这是当前 npm 上的软件包)。
你可以在这里查看我的叉子:
https://github.com/danielbchapman/keystone/commit/d28dae031252fc2512598ef8496f336f27c1bbc0
//Git 标签 v3.22 补丁
来自 d28dae031252fc2512598ef8496f336f27c1bbc0 周一 9 月 17 日 00:00:00 2001
来自:"Daniel B. Chapman"
日期:2016 年 8 月 30 日,星期二 09:25:50 -0600
主题:[PATCH] 添加了一个本地 auth
变量来镜像
keystone.get('auth')
配置设置,以便使用
自定义用户对象(如 Passport.js)不会在
由于 'signed in as' 功能,管理页面。
---
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
我有一个(我希望)关于 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" 对象实际上是框架中的依赖项还是基本上是为了方便?删除模型
//'user model' : 'User'
使 Keystone 崩溃
Sorry, an error occurred loading the page (500) Unknown keystone list undefined).
我相当确定前一个错误与请求中的 "User Object" 设置为一些愚蠢的东西有关,因此 Jade 模板崩溃了。是否可以将此 User 对象与框架分离?如果不能,是否可以设置此对象,以便我可以继续使用 passport.js
进行主要身份验证?
我对这个主题特别感兴趣,因为我想在 Keystone.js 管理模块中实施基于角色的身份验证,但没有更多关于此 works/ideas 解决方法的信息,我不知道有一个起点。
(**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
也退出,因为我有一个 "user" 对象,该对象变为 null 并使模板崩溃。
编辑#2 我已经创建了一个补丁来解决关闭用户身份验证时的崩溃问题,它并没有真正回答问题,但它使应用程序再次可用而无需依赖 Keystone.js 进行身份验证(这是一个关键要求这个内容管理系统)。
我仍在寻求这方面的帮助,但这是我暂时绕过它的方法。应用程序似乎正朝着管理控制台的全新方向发展。
我正在针对该分支发出拉取请求(我认为这是当前 npm 上的软件包)。
你可以在这里查看我的叉子: https://github.com/danielbchapman/keystone/commit/d28dae031252fc2512598ef8496f336f27c1bbc0
//Git 标签 v3.22 补丁
来自 d28dae031252fc2512598ef8496f336f27c1bbc0 周一 9 月 17 日 00:00:00 2001
来自:"Daniel B. Chapman"
日期:2016 年 8 月 30 日,星期二 09:25:50 -0600
主题:[PATCH] 添加了一个本地 auth
变量来镜像
keystone.get('auth')
配置设置,以便使用
自定义用户对象(如 Passport.js)不会在
由于 'signed in as' 功能,管理页面。
---
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