用例
我有一些前端自定义表单,需要登录用户。 因此我使用 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/