【问题标题】:How to deal with roles on a MVC nodejs service (jsonwebtoken,mongoose)如何处理 MVC nodejs 服务上的角色(jsonwebtoken,mongoose)
【发布时间】:2018-01-28 21:34:12
【问题描述】:

我正在使用 MVC 模式开发一项服务,并支持 NodeJS、jsonwebtoken 和 MongoDB (mongoose)。在我的应用程序中,我模拟了两个主要参与者:普通用户(可以通过 Facebook、Amazon 或本地注册)、司机(只能通过网站注册)。我还必须对用户和驱动程序之间的事务进行建模,这些事务显然只能由用户和驱动程序通过 CRUD 范式进行修改。

这里贴出用户和司机的模型:

  var userSchema = mongoose.Schema({

  name: String,
  surname: String,
  email: String,
  password: {
      type: String,
      required: true
  }
});


var driverSchema = mongoose.Schema({
name: {
    type: String,
    required: true
},
surname: {
    type: String,
    required: true
},
email: {
  type:String,
  required: true,
  unique:true
},
password: {
    type: String,
    required: true,
    minlength: minimum
} });

我的问题在于对端点的身份验证和数据访问。如何区分用户和驱动程序之间的令牌?我应该将此信息添加到令牌的有效负载中吗?

【问题讨论】:

    标签: node.js mongoose json-web-token


    【解决方案1】:

    嗯,有几种方法可以解决这个问题。其中一种方法是使用用户的角色签署用户的令牌。由于您已经为不同类型设置了单独的身份验证逻辑,因此您可以轻松地使用特定的 userType 对令牌进行签名。

    对于驱动程序,代码应该是这样的:

    var driverToken = jwt.sign({email:'xxx@gmail.com', userType: 'driver'}, 'YOUR_SECRET');
    

    对于普通用户,代码应该是这样的:

    var normalToken = jwt.sign({email:'xxx@gmail.com', userType: 'normal'}, 'YOUR_SECRET');
    

    现在在验证令牌时,您可以这样做:

    var user = jwt.verify(TOKEN, 'YOUR_SECRET');
    
    if(user.userType === 'driver') {
      //Hey, you are a driver!
    }
    else if(user.userType === 'normal') {
      //Hey, you are normal...
    }
    

    另外,我注意到驱动程序和用户架构几乎相同。我建议你看看mongoose's discriminators。基本上,discriminators 是 mongoose 的模式继承机制。

    【讨论】:

    • 这正是我要找的,也非常感谢您的继承建议!
    • 很高兴这有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2013-04-18
    • 2014-07-14
    • 2012-11-08
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    相关资源
    最近更新 更多