node.js - 如何处理 MVC Nodejs 服务上的角色(jsonwebtoken、mongoose)

标签 node.js mongoose json-web-token

我正在使用 MVC 模式在 NodeJS、jsonwebtoken 和 MongoDB (mongoose) 的支持下开发一项服务。在我的应用程序中,我建模了两个主要参与者:普通用户(可以通过 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
} });

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

最佳答案

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

对于驱动程序,代码将如下所示:

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

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

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

现在验证 token 时,您可以执行以下操作:

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 。基本上,鉴别器是 Mongoose 的模式继承机制。

关于node.js - 如何处理 MVC Nodejs 服务上的角色(jsonwebtoken、mongoose),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786440/

相关文章:

node.js - 如何在 Ubuntu 16.04 Server 中通过源代码安装 Node.Js?

javascript - MongoDb 当存储为字符串时按日期查找

node.js - Mongoose:find 语句未执行

session - 当我们有客户端 session 时,为什么需要 JWT?

azure - 在返回的 JWT 中找不到 approles

node.js - 如何在nodejs中使用jsonwebtoken实现注销功能

node.js - 在本地安装和使用 nodemon

javascript - 如何使用 Node.js createReadStream 和 createWriteStream 写入多个文件

mysql - 如何从模型中自动添加 Sequelize 列?

node.js - 从 Mongoose 查询结果中排除 null 属性