gpt4 book ai didi

javascript - sails 政策不起作用

转载 作者:行者123 更新时间:2023-12-03 06:51:02 24 4
gpt4 key购买 nike

当我编写策略时,它不起作用。我的代码有什么问题吗?

policies.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')
}
};

用户 Controller .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 中设置的代码中无法访问该策略,因为该策略是在 Controller 方法之前运行。如果您确实想拥有这种策略,则需要添加另一个端点,该端点将初始化并设置 req.session.canCreate = true;

根据整体结构,我可能会将策略更改为:

if (!req.session.authenticated) {
return next();
}
else {
res.forbidden('already authenticated')
}

我会在用户创建和登录时设置req.session.authenticated。换句话说,任何人*都可以创建用户帐户,前提是他们当前没有登录;如果他们已经登录,则策略将拒绝用户创建。 (当然,这并不是适合所有用例的正确解决方案,因此它更多的是一个起点。请根据您自己的需求进行调整。)

*用户创建仍然可以通过验证码或共享/私有(private) secret 或其他某种方式来限制,这些方式将在 Controller 或可能的策略中进行检查。

关于javascript - sails 政策不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37495435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com