如何处理MVC nodejs服务上的角色(jsonwebtoken,mongoose)

时间:2017-08-20 20:20:33

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

我在NodeJS,jsonwebtoken和MongoDB(mongoose)的支持下使用MVC模式开发服务。在我的应用程序中,我模拟了两个主要角色:普通用户(可以通过Facebook,亚马逊或本地注册注册),驱动程序(仅通过网站注册)。我还要模拟用户和用户之间的交易。显然只有用户和驱动程序才能通过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
} });

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

1 个答案:

答案 0 :(得分:2)

嗯,有几种方法可以解决这个问题。其中一种方法是用他们的角色签署用户的令牌。由于您已经为不同类型提供了单独的身份验证逻辑,因此您可以使用特定的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的模式继承机制。