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

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

我的问题是在对端点的身份validation和数据访问。 我怎样才能创build用户和驱动程序之间的令牌区别? 我应该将这些信息添加到令牌的有效载荷中吗?

那么,有几种方法来解决这个问题。 其中一种方法是用他们的angular色来签署用户的令牌。 由于您已经有了针对不同types的单独validation逻辑,因此您可以使用特定的用户types轻松签署令牌。

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

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

对于普通用户来说,代码会是这样的:

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

现在在validation令牌时,可以这样做:

 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... } 

另外,我注意到驱动程序和用户模式几乎是一样的。 我build议你看看mongoose的discriminators 。 基本上, discriminators是mongoose的模式inheritance机制。