【问题标题】:Role based validation not working in loopback基于角色的验证在环回中不起作用
【发布时间】:2017-02-16 13:16:33
【问题描述】:

我有两个角色,想根据传入数据中的角色字段对传入的发布请求应用不同的数据验证规则,即。如果发布的角色是管理员,则验证输入是否具有名称字段,如果角色是用户,则验证输入是否具有年龄。我在 create 方法的 beforeRemote 钩子中编写了验证代码,例如:

 if (role === "admin") {
      Members.validatesPresenceOf('name');
      next();
 } else {
      Members.validatesPresenceOf('age');
      next();
 }

对于第一个请求,如果角色是管理员,则验证工作并捕获输入中不存在名称的情况。但是对于下一个请求,如果角色是用户,仍然会出现名称字段而不是年龄的验证错误。然后,如果我重新启动节点服务器并首先尝试使用用户角色,则会捕获年龄验证,但是对于所有后续请求,无论角色如何,都会检查年龄验证。可能是什么问题呢?如果还有其他方法可以实现这一点,请告诉我。提前致谢!

【问题讨论】:

    标签: node.js validation loopbackjs


    【解决方案1】:

    验证对于模型是永久性的。这种方法行不通。

    您需要创建一个自定义验证器:

    Members.validateAsync('name', function(err, done){
      var role = getRole();
      if(role === 'admin'){
        if(!this.name) err();
      }
      done();
    }, {message: 'name should be filled'});
    
    Members.validateAsync('age', function(err, done){
      var role = getRole();
      if(role !== 'admin'){
        if(!this.age) err();
      }
      done();
    }, {message: 'age should be filled'});
    

    【讨论】:

    • 由于请求是注册请求,是否可以从 validateAsync 函数中检查输入请求中的角色字段是否包含管理员或用户?
    • @DevStar 在注册阶段没有用户!也许您将注册用户的角色发送到表单数据中的服务器
    • 实际上保存的两个角色是针对移动和网络请求的。来自移动设备的请求将在请求中发送一个角色,另一个角色用于来自 Web 后端的请求。
    • @DevStar 我在答案中提供的解决方案是通用的。您可以检查请求来源中的角色或您想要的任何内容。重要的是您需要像我在答案中提到的那样进行验证。验证是永久性的。您可以定义一次验证。所以任何对角色的检查都应该在验证函数中
    猜你喜欢
    • 2013-05-29
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2019-01-19
    • 2011-09-02
    • 2016-01-03
    • 2018-03-09
    相关资源
    最近更新 更多