如何处理 MVC nodejs 服务上的角色(jsonwebtoken、mongoose)
How to deal with roles on a MVC nodejs service (jsonwebtoken,mongoose)
我正在使用 MVC 模式在 NodeJS、jsonwebtoken 和 MongoDB (mongoose) 的支持下开发服务。在我的应用程序中,我模拟了两个主要角色:普通用户(可以 sign-up 通过 Facebook、亚马逊或本地注册)、司机(sign-up 只能通过网站)。我还必须对用户和驱动程序之间的事务进行建模,这些事务显然只能由用户和驱动程序通过 CRUD 范例进行修改。
这里我post用户和司机的型号:
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
} });
我的问题在于端点的身份验证和数据访问。我如何区分用户和司机之间的令牌?我应该将此信息添加到令牌的有效负载中吗?
好吧,有几种方法可以解决这个问题。其中一种方法是用他们的角色签署用户的令牌。由于您已经为不同的类型设置了单独的身份验证逻辑,因此您可以轻松地使用特定的 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...
}
此外,我注意到驱动程序和用户架构几乎相同。我建议你看看。基本上,discriminators
是 mongoose 的模式继承机制。
我正在使用 MVC 模式在 NodeJS、jsonwebtoken 和 MongoDB (mongoose) 的支持下开发服务。在我的应用程序中,我模拟了两个主要角色:普通用户(可以 sign-up 通过 Facebook、亚马逊或本地注册)、司机(sign-up 只能通过网站)。我还必须对用户和驱动程序之间的事务进行建模,这些事务显然只能由用户和驱动程序通过 CRUD 范例进行修改。
这里我post用户和司机的型号:
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
} });
我的问题在于端点的身份验证和数据访问。我如何区分用户和司机之间的令牌?我应该将此信息添加到令牌的有效负载中吗?
好吧,有几种方法可以解决这个问题。其中一种方法是用他们的角色签署用户的令牌。由于您已经为不同的类型设置了单独的身份验证逻辑,因此您可以轻松地使用特定的 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...
}
此外,我注意到驱动程序和用户架构几乎相同。我建议你看看discriminators
是 mongoose 的模式继承机制。