【发布时间】:2012-10-17 10:55:27
【问题描述】:
我需要维护 [User] 文档的“用户”集合,以便为我的网站实施身份验证机制。
[用户] ~ {color: string, username:string, password-hash:string, password-salt: string}
此外,每个 [User] 可以是 3 种颜色之一 - [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] 架构查询“用户”集合,因为我只需要知道密码哈希。
但是,我想要一个函数如下(伪代码):
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
谢谢!
【问题讨论】: