[MEAN] Zu viele JWT-Decodings machen die Software langsam

benneque schrieb:
Was macht der Code `passport.authenticate('jwt', {session:false})`?
Als Middleware für Node wird damit der Request, genau das Request.token validiert und bei einem unvaliden Token ein 401 zurückgegeben.

benneque schrieb:
Deine `decoded` Variable wird im falschen Scope deklariert. Die sollte vor dem `if(req.headers ...)` deklariert werden. Die Variable wird ja auch schließlich nach dem `if`-Block wieder benutzt.
Da gab es noch einen Fehler mit einer Klammer, den hab ich eben korrigiert. Normalerweise gehört das alles zum ersten If.

benneque schrieb:
`UserRights.findById` klingt irgendwie nicht logisch. Da geht's ja nicht um IDs, oder?
Da hab ich getrickst ... zumindest war das die Idee. Ich musste ja irgendwie den Querverweis auf den User hinbekommen. Also gibt es im UserSchema einen Eintrag :

userRights: {
type: mongoose.Schema.Types.ObjectId,
ref: 'UserRights'
},


dementsprechend kann ich nach der ID suchen und bekomme dann die Rechte des Users übermittelt. Hier muss man aber aufpassen, in welchem Dialog man ist. Zumeist handelt es sich bei den abzufragenden Rechten um die des Users von welchem der Request kommt. Ab und zu möchte ich aber ja auch wissen, welche Rechte andere User haben oder ich möchte im Namen eines anderen Benutzers Aktionen tätigen, sofern diese für den anderen Benutzer zulässig sind.

benneque schrieb:
Die HTTP Codes sind auch nicht unbedingt korrekt. Nicht alles ist 401 ;) An machen Stellen passt 400 oder 403 besser.
Da muss ich mich auch erstmal reinfummeln... mal bei Google gucken, wofür die ganzen einzelnen Codes stehen, danke :-)

benneque schrieb:
Und der gesamte `if(req.headers ...) { ... }` Block sollte in eine eigene Funktion ausgelagert werden. Den exakt selben Code musst du ja bei jedem Request ausführen. Und aktuell musst du die 10 Zeilen jedes mal kopieren.
Da muss ich mir noch mal anschauen, wie man diese Funktion global implementiert.

Das sind alles nur Kleinigkeiten, hat viel mit Code Style zu tun. Also für die eigentliche Funktion des Programms ist es natürlich nicht so wichtig, aber sobald man mit mehreren Leuten im Team arbeitet ist es sau praktisch. Dafür gibt's schließlich Standards ;)

Aktuell arbeite ich alleine dran, sonst hätte ich evtl. schon früher einen Rüffel bekommen. Ist für mich aber natürlich auch wichtig, mich an der Stelle an Standards zu halten weshalb ich deine ganzen Sachen hier echt gerne aufsauge, danke! :-)
 
Das mit dem `passport` kommt mir trotzdem noch spanisch vor.
Das sieht für mich sehr danach aus, als wenn du das JWT doppelt(!) validierst. 1x über `passport` und dann noch mal mit `jwt.verify`.

Ich hab mich da jetzt nicht groß eingelesen, aber soweit ich das verstanden habe, solltest du über `req.user` oder so direkt an die Daten kommen, die von `passport` ausgelesen wurden. D.h. du solltest dir den kompletten `if(req.headers ...) { ... }` Block sparen können.

Die HTTP Codes sind teilweise mehrdeutig und für manche Fälle gibt's auch gar keine offiziellen Codes ;)
Im Notfall kannst du immer `400` benutzen. Heißt so viel wie "Ein Fehler ist aufgetreten. Der Fehler liegt beim Client".
`401` wird für Authentication Fehler benutzt. Also quasi "nicht eingeloggt". Der Server kann nicht herausfinden, um welchen User es sich handelt.
`403` für Authorization Fehler. Also "fehlende Rechte". Der Server weiß, welcher User es ist. Aber der User darf nicht.
 
benneque schrieb:
Das mit dem `passport` kommt mir trotzdem noch spanisch vor.
Das sieht für mich sehr danach aus, als wenn du das JWT doppelt(!) validierst. 1x über `passport` und dann noch mal mit `jwt.verify`.

Ich hab mich da jetzt nicht groß eingelesen, aber soweit ich das verstanden habe, solltest du über `req.user` oder so direkt an die Daten kommen, die von `passport` ausgelesen wurden. D.h. du solltest dir den kompletten `if(req.headers ...) { ... }` Block sparen können.

:rolleyes: ich habs gearde nachgelesen, dem ist so... oh man, danke -> dann raus damit!
 
Zurück
Oben