当我写政策时,它不起作用。我的代码有什么问题?
policy.js
'UserController': {
'create': ['canCreate']
}
routes.js
'post /register': {
controller: 'UserController',
action: 'create'
}
政策/canCreate.js
module.exports = function (req, res, next) {
if (req.session.canCreate) {
return next();
}
else {
res.send('no auth')
}
};
UserController.js
module.exports = {
create: function (req, res) {
req.session.canCreate = true;
User.create({
name: req.param('name'),
password: req.param('password')
}, function onSuccess(err, newUser) {
if (err) {
return res.negotiate(err);
}
res.json({
id: newUser.id
})
})
}
};
最佳答案
该策略正在寻找req.session.canCreate
,但是只能在UserController.create
中设置的代码中找到该代码,而该代码无法在控制器方法之前运行,因此无法访问。如果您确实想要这种策略,则需要添加另一个端点,该端点将初始化并设置req.session.canCreate = true;
根据总体结构,我可能会将策略更改为:
if (!req.session.authenticated) {
return next();
}
else {
res.forbidden('already authenticated')
}
我将在用户创建和登录时设置
req.session.authenticated
。换句话说,任何人*都可以创建一个用户帐户,前提是他们当前尚未登录。如果他们已经登录,则该策略将拒绝用户创建。 (当然,这并不是适用于所有用例的解决方案,因此,它更多是一个起点。请根据您自己的需求进行调整。)*仍然可以通过验证码或共享/私有机密或其他某种方式来限制用户创建,这可以在控制器或策略中进行检查。
关于javascript - 帆政策不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37495435/