【问题标题】:SailsJS Policy based route with a viewSailsJS 基于策略的路线与视图
【发布时间】:2014-02-13 17:00:15
【问题描述】:

我正在尝试使用routes.js 定义到'/account' 的路由。

我希望尝试访问该路径的人通过 UserControllercheckLogin 操作,如果安全检查通过,则应使用定义的视图呈现用户 home/account

这是我的代码:

routes.js:

'/account': {
    controller: 'UserController',
    action: 'checkLogin',
    view: 'home/account'
  }

policies.js:

UserController: {
    '*': 'isAuthenticated',
    'login': true,
    'checkLogin': true
  }

由于某种原因,我无需通过 isAuthenticated 策略检查即可查看 /account

【问题讨论】:

  • 快速问题:您似乎正试图将策略逻辑放入控制器中(从名称“checkLogin”的声音来看,这正是 isAuthenticated 策略中应该执行的操作),您是否修改过政策?

标签: sails.js


【解决方案1】:

对于策略、控制器和视图的工作方式,这里看起来有点混乱。正如上面的@bredikhin 所述,您的控制器将永远不会被调用,因为路由被绑定到视图。同样重要的是要注意策略不能绑定到视图,只能绑定到控制器。正确的设置应该是这样的:

config/routes.js:

'/account': 'UserController.account'

config/policies.js:

UserController: {
  '*': 'isAuthenticated' // will run on all UserController actions
  // or
  'account': 'isAuthenticated' // will run just on account action
}

api/policies/isAuthenticated.js:

    module.exports = function(req, res, next) {

     // Your auth code here, returning next() if auth passes, otherwise
     // res.forbidden(), or throw error, or redirect, etc.

    }

api/controllers/UserController.js:

module.exports = {

  account: function(req, res) {

     res.view('home/account');

  }
}

【讨论】:

  • 这个'你的控制器永远不会被调用,因为路由被绑定到一个视图'是这个答案的一个非常重要的部分
【解决方案2】:

简而言之:控制器/动作样式或视图样式路由应在routes.js 的同一路由中使用,而不是同时使用。

根据路由器的source code,一旦路由对象中有view属性,绑定就会停止,所以基本上Sails永远不知道你的/account路径应该路由到哪个控制器,这意味着你的@987654325 @-specific 策略配置永远不会触发。

因此,只需从路由中删除 view 属性,您始终可以在您的操作中通过显式渲染指定视图路径(如果您想要非标准路径)。

【讨论】:

    【解决方案3】:

    对于使用策略的静态工作,您可以使用控制器和操作设置路由:

    'GET /login': 'AuthController.index',
    

    并在控制器中设置视图/布局:

    index: function (req, res) {
        res.view('auth/login', { layout: 'path/layout' } );
    },
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 2011-04-08
      相关资源
      最近更新 更多