帆政策不起作用

时间:2016-05-28 05:12:18

标签: javascript node.js sails.js

当我写政策时,它不起作用。我的代码出了什么问题?

policies.js

'UserController': {
    'create': ['canCreate']
}  

routes.js

'post /register': {
    controller: 'UserController',
    action: 'create'
}  

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

1 个答案:

答案 0 :(得分:1)

该策略正在查找req.session.canCreate,但是您的代码只能在UserController.create内设置,因为该策略是在控制器方法之前运行的,因此无法访问该代码。如果您真的想要这种策略,则需要添加另一个端点,该端点将初始化并设置req.session.canCreate = true;

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

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

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

*仍然可以通过验证码或共享/私人秘密或其他方式限制用户创建,这些秘密可以在控制器或政策中进行检查。