Diese Frage bezieht sich nur halb auf meinen Code und die Hälfte auf die High-Level-Ansicht, in der tatsächlich Daten für einen bestimmten Benutzer von einer Node-API abgerufen werden.Daten für Benutzer basierend auf JWT in Node/Express erhalten
Also ich habe Benutzer Anmeldung/signin alles funktioniert gut, und lassen Sie sagen, ich habe eine Eins-zu-viele Zuordnung zwischen Benutzer und Widgets, so kann jeder Benutzer Widgets von seiner oder ihrer Profilseite erstellen und löschen.
hier sind also meine Datenbank Modelle:
var User = new mongoose.Schema({
email: {
type: String,
unique: true,
required: true
},
hash: String,
salt: String
widgets : [{ type: Schema.Types.ObjectId,
ref: 'widget'
}],
});
var Widget = new mongoose.Schema({
name : String,
type : String,
description : String,
});
Im User-Login-Prozess, ich JWT erzeugen und verwenden, die eine Genehmigung Header auf dem Front-End zu speichern.
Jetzt ist meine Frage zweifach. 1) Wie speicher ich Widgets korrekt, so dass sie mit dem aktuell angemeldeten Benutzer verknüpft sind? und 2) Wie bekomme ich alle mit einem Benutzer verbundenen Widgets?
Meine ersten Gedanken sind so etwas wie folgt aus:
app.get('api/widgets', function(req, res, next){
// decode authorization header to get user email
// run database query to return all widgets associated with user email
});
app.post('api/widgets', function(req, res, next){
// decode authorization header to get user email
// create widget and update user with widget ID
});
Ist dies die richtige Idee? Und wenn ja, wie würde ich den Autorisierungsheader dekodieren, um die E-Mail des Benutzers zu erhalten? Muss ich für alle Objekte, die dem Benutzer zugeordnet sind, denselben Prozess durchlaufen? Oder gibt es eine schnellere und bequemere Möglichkeit, dies in Node/Express zu tun?
Ja, können Sie Benutzer Widgets Daten in jwt speichern, aber Sie werden es brauchen zu aktualisieren, nachdem jedes Add/Widget Betrieb entfernen, und es wird eine zusätzliche Logik erfordern neue jwt mit dem Client zu synchronisieren. Am einfachsten ist es, die Sitzung zu verwenden. – alexmac
Sorry, nicht sicher, ob ich in der ursprünglichen Frage klar war. Ich möchte die Widget-Daten nicht im JWT speichern. Ich speichere nur die Benutzer-E-Mail im JWT.Mit "Benutzer mit Widget-ID aktualisieren" meinte ich, den Benutzer in der Datenbank mit der Widget-ID zu aktualisieren. – jmknoll
Ich denke, das ist der richtige Weg. Wenn Sie eine Bibliothek zum Verschlüsseln des JWT-Tokens verwenden, hat es höchstwahrscheinlich auch eine Dekodierungsfunktion. Um das Widget zu speichern, verwenden Sie einfach die Speichern-Funktion des Widget-Modells 'neues Widget ({Name ....}) .Save (Funktion (Fehler, Widget) {Aktualisiere den Benutzer hier mit $ Push-Operator})' dann Widgets für den Benutzer zu verwenden 'User.findOne (id) .populate ('widgets'). Exec (function (err, user)) {user hier hat ein Array von Widgets, nicht ids, sondern tatsächliche Objekte aus der Widget-Sammlung});' – Molda