我需要维护一个名为“users”的文档集合,以实现我的站点的身份验证机制。[User]文档包含以下字段:{color: string, username: string, password-hash: string, password-salt: string}。此外,每个[User]可以是三种颜色中的一种 - [RedUser]、[BlueUser]和[GreenUser],并且将根据颜色具有不同的模式。所有模式都基于[User]模式。
[RedUser] ~ Union( [User], {redfield:string} )
[GreenUser] ~ Union( [User], {greenfield:boolean} )
[BlueUser] ~ Union( [User], {bluefield:number} )
例如:一个绿色用户 - {color:'green',username:'bob',password-hash:'1313a...',password-salt:'...'}
为了进行身份验证,我想使用通用的[User]模式查询"users"集合,因为我只需要知道密码散列值。
然而,我想要以下功能(伪代码):
Authenticate( username, password )
userDoc <- users.findOne({username:username})
if badPassword(usersDoc.password-hash,password) throw error
else
if userDoc.color=='red'
return recast(userDoc, RedUser)
if userDoc.color=='green'
return recast(userDoc, BlueUser)
if userDoc.color=='blue'
return recast(userDoc, GreenUser)
那么我如何将一个[User]文档转换为例如[RedUser]?
我使用的是Node.js/MongooseJs/Coffeescript。
谢谢!