node.js - 登录后 keystonejs 重定向无法使用函数作为第二个参数

标签 node.js express authentication redirect keystonejs

用例

我有一些前端自定义表单,需要登录用户。 因此我使用 keystone.js 自己的“requireUser”中间件。 用户登录后,要访问该网站,默认行为是在“/keystone”处显示管理 UI - 但是我想重定向回之前的前端页面,以便用户可以开始填写表单。

什么有效

在keystone.js中,在同名文件中,可以设置

keystone.set('signin redirect', '/');

登录后重定向到主页。

我需要什么

但是,我需要的是设置要动态重定向的 url,但是当我这样做时,该函数永远不会被调用:

keystone.set('signin redirect', function(req, res){
    var url = req.session.returnTo || '/';
    res.redirect(url);
});

通过从前端页面获取 req.path 属性,在前面提到的“middleware.js”文件中设置 req.session.returnTo 参数:

exports.requireUser = function (req, res, next) {
if (!req.user) {
    req.flash('error', 'Please sign in to access this page.');
    req.session.returnTo = req.path;
    res.redirect('/keystone/signin');
} else {
    next();
}
};

我的临时解决方法

在 keystone/admin/server/routes/signin.js 中,我扩展了 locals 对象的重定向属性

redirect: keystone.get('signin redirect'),

redirect: (typeof keystone.get('signin redirect') === 'string') ? 
keystone.get('signin redirect') : keystone.get('signin redirect')(req, res),

我知道这不是一个理想的解决方案,但由于我仍在学习 keystone.js,你知道更好的处理方法吗?

注意:在设置“退出重定向”键(作为第二个参数的字符串或函数)时,相同的重定向策略有效,所以我想这一定是忘记实现的东西?

谢谢

最佳答案

@hajn Keystone项目#1489问题后,目前还没有理想的解决方案。文档没有正确提供函数参数(我认为这是一个问题)。所以,我三天前重新打开了这个问题。

关于node.js - 登录后 keystonejs 重定向无法使用函数作为第二个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46454960/

相关文章:

node.js - Angular2 - 成功获取 iframe.contentWindow 时出现问题并调用 postMessage() 时出错

node.js - 如何返回与隐私值相关的特定对象值?

javascript - Node、ExpressJS、vhost - 运行多个应用程序

android - 通过 Android 的 AccountManager 获取 Microsoft Exchange Authentication token

java - 如何使用 Java 使用 Selenium WebDriver 在 Chrome 中处理身份验证弹出窗口

node.js - moment.timezone 中的反转区

node.js - npm uninstall 不删除文件

javascript - karma.js 在基本 "karma init"设置后不返回任何结果

javascript - 使用 CORS XHR 时浏览器不发回 cookie

c++ - 以编程方式检查 Windows 是否已使用 C++ 激活