2017-08-20 7 views
1

NodeJS、jsonwebtoken、MongoDB(mongoose)のサポートでMVCパターンを使ってサービスを開発しています。私のアプリケーションでは、通常のユーザー(Facebook、Amazonまたはローカルサインアップによるサインアップが可能)、ドライバー(ウェブサイトからのサインアップのみ)の2つの主要アクターをモデル化しました。また、ユーザ&ドライバ間のトランザクションをモデル化する必要があります。このドライバは、CRUDパラダイムによって明らかにユーザーとドライバによってのみ変更できます。ここでMVC nodejsサービス(jsonwebtoken、mongoose)のロールをどう扱うか

私は、ユーザとドライバのモデルを投稿:

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 
} }); 

私の問題は、エンドポイントへの認証とデータアクセスです。ユーザーとドライバのトークンを区別するにはどうすればよいですか?この情報をトークンのペイロードに追加する必要がありますか?

答えて

2

この問題を解決する方法はいくつかあります。アプローチの1つは、ユーザのトークンに自分の役割で署名することです。異なるタイプの認証ロジックはすでに別々になっているため、特定のuserTypeを使用して簡単にトークンに署名できます。ドライバの場合

、コードはこのようなものになるだろう:トークンを検証するとき、あなたは、

var normalToken = jwt.sign({email:'[email protected]', userType: 'normal'}, 'YOUR_SECRET'); 

今:

var driverToken = jwt.sign({email:'[email protected]', userType: 'driver'}, '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... 
} 

また、私はドライバとユーザーのスキーマがほぼ同じであることに気付きました。 mongoose's discriminatorsをご覧ください。基本的にdiscriminatorsは、マングースのスキーマ継承メカニズムです。

+0

これはまさに私が探していたものであり、継承の提案についてもたくさんありがとう! – Thecave3

+0

これは助けてくれてうれしい! –

関連する問題