0

我无法弄清楚风帆政策,我按照教程进行操作,但仍然无法使其工作。

在我的 policy.js 文件中:

module.exports.policies = {
  '*':true,
  UsersController:{
    '*':false,
    signIn: 'skipAuthenticated'
  }
}

在我的 authenticated.js 文件中:

module.exports = function skipAuthenticated(req, res, ok){
  console.log("testing");
  if (req.session.authenticated){
    console.log("testing");
    return ok();
  }
  else {
    return res.send("You are not permitted to perform this action.", 403);
  }
}

但政策并未触发。任何帮助将非常感激。

4

4 回答 4

3

假设您有 ProductsController 和 LoginController。

在 policy.js 中:

module.exports.policies = {


    '*': true,
    login: {
        '*': true
    },
    products: {
        '*': 'isAuth',
        feed: true
    }

}

在上面的例子中:

任何人都可以访问“登录”控制器中的操作。但是,在产品控制器中,除“feed”之外的任何其他操作都需要通过“isAuth”策略。

于 2014-01-18T00:44:45.977 回答
2

如果您查看标题为如何使用策略保护我的控制者的部分?它描述了策略名称与api/policies中的文件名称匹配。所以你的问题是实际的策略名称是“authenticated”(你说authenticated.js)并且你试图在你的ACL中使用的策略名称是“skipAuthenticated”。

因此,您可以将策略文件名更改为 skipAuthenticated.js,也可以更改 ACL 以反映实际的策略名称。

http://sailsjs.org/#!documentation/policies

您可以将一个或多个策略应用于给定的控制器或操作。/policies 文件夹中的任何文件(例如authenticated.js)都可以通过其文件名减去扩展名(例如'authenticated')在ACL (config/policies.js) 中引用。

于 2013-12-23T13:16:05.287 回答
1

查看我完成的要点。它应该与 Sails 0.98 一起使用 passportjs 和 mysql https://gist.github.com/anhnt/8297229

于 2014-01-18T00:48:18.873 回答
0

我猜文件名是错误的尝试将authenticated.js重命名为skipAuthenticated.js,如果这无助于删除camelcase名称......我遇到了camelcase的一些问题,但不记得它是否与策略有关

于 2013-10-08T10:03:55.210 回答