サイトの認証メカニズムを実装するために、 [User]ドキュメントのコレクション「users」を維持する必要があります。
[ユーザー] ~ {色: 文字列、ユーザー名: 文字列、パスワード ハッシュ: 文字列、パスワード ソルト: 文字列}
さらに、各[User]は[RedUser]、[BlueUser]、および[GreenUser]の 3 つの色のいずれかであり、色によってスキーマが異なります。[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 を使用しています
ありがとう!