2017-08-20 3 views
1

Ich entwickle einen Dienst, der das MVC-Muster mit der Unterstützung von NodeJS, jsonwebtoken und MongoDB (mongoose) verwendet. In meiner Bewerbung habe ich zwei Hauptakteure modelliert: normale Benutzer (die sich über Facebook anmelden können, Amazon oder lokale Anmeldung), Fahrer (Anmeldung nur über die Website). Ich muss auch die Transaktionen zwischen Benutzer & Treiber modellieren, die offensichtlich durch ein CRUD-Paradigma nur von Benutzern und Treibern geändert werden können.Wie man mit Rollen auf einem MVC-Knotenjs-Dienst (jsonwebtoken, mongoose) arbeitet

Hier poste ich die Modelle von Benutzern und Treiber:

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

Mein Problem ist bei der Authentifizierung und Datenzugriff auf den Endpunkten. Wie kann ich beim Token zwischen Benutzern und Treibern unterscheiden? Sollte ich diese Information der Nutzlast des Tokens hinzufügen?

Antwort

2

Nun, es gibt mehrere Ansätze, um dieses Problem zu lösen. Einer der Ansätze wäre, das Token des Benutzers mit seiner Rolle zu signieren. Da Sie für die verschiedenen Typen bereits eine separate Authentifizierungslogik haben, können Sie das Token einfach mit einem bestimmten userType signieren. so etwas wie dieses

Für den Fahrer, würde der Code sein:

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

Für den normalen Benutzer, würde der Code so etwas wie dieses: Jetzt

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

wenn das Token Verifizieren Sie kann dies tun:

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... 
} 

Auch habe ich festgestellt, dass das Treiber- und Benutzerschema sind fast gleich. Ich schlage vor, dass Sie einen Blick auf mongoose's discriminators werfen. Im Wesentlichen sind discriminators ein Schema Vererbungsmechanismus für Mungo.

+0

Genau das habe ich gesucht, danke auch vielmals für den Vererbungsvorschlag! – Thecave3

+0

Froh das hat geholfen! –

Verwandte Themen