JavaScript [Node.js] Bestimmte Inhalte für einen bestimmten Benutzer

J

Jxn

Gast
Hallo,

ich bin gerade in das Thema Node.js eingestiegen. Mein Ziel war es ein Authentifizierungs-System zu programmieren. Natürlich mit Hilfe von Tutorials. Habe mich dabei an diesem hier orientiert.

Klappt auch alles soweit, doch ich möchte noch ein bisschen weitergehen. Ich möchte, dass jeder Benutzer einen eigenen Inhalt auf der folgenden Seite kriegt. Momentan wird man ja auf die index-Seite weitergeleitet.

Gibt es dafür vielleicht auch wieder fertige packages von Node.js selber oder eventuell Strategies für passport? Meine Idee war erstmal für jeden User eine eigene Seite zu erstellen und dann abzufragen, welcher User sich gerade einloggt:

index.js
Code:
router.post('/login', passport.authenticate('local'), function(req, res) {
    if(req.user == "Test") {
      res.redirect('/seitefuertest');
    }
    res.redirect('/');
});

Ist aber weder dynamisch, noch hat es funktioniert.

Grüße
 
Na ja... Klar kannst Du für jeden User eine eigene Seite erstellen..
Javascript:
res.redirect("/seitefuer" + req.user);

Schön ist das natürlich nicht. Ich würde die Seite dynamisch durchs Backend (PHP? Java?) zusammenbauen lassen je nachdem, welcher user eingeloggt ist.
Dann mit Datenbankabfrage nach User die benötigten Details anzeigen.
Das wäre die einfachste und funktionalste Lösung.
 
AnonStar schrieb:
Schön ist das natürlich nicht. Ich würde die Seite dynamisch durchs Backend (PHP? Java?) zusammenbauen lassen je nachdem, welcher user eingeloggt ist.
Dann mit Datenbankabfrage nach User die benötigten Details anzeigen.
Das wäre die einfachste und funktionalste Lösung.

/seitefuerUSER kann ja vom Backend je nach URL Regel dynamisch erstellt werden. Das eine schließt das andere ja nicht aus.
 
Also schon so, wie ich es mir gedacht hatte.

Nun habe ich allerdings das Problem, dass anscheinend die if-Abfrage nicht funktioniert. Denn egal ob ich mich als Test oder als Test2 einlogge, werde ich immer auf die index-Seite weitergeleitet.
 
Dann lass dir ausgeben was in req.user drinnesteht. Achte auch auf eventuelle Leerzeichen.
 
Bitte erstelle keine Eigene Seite pro Nutzer, wenn es nicht unbedingt sein muss ;)
In deinem Fall klappt es auch nicht, da du ja den User mit Passports deserialize Funktion aus deiner Datenbank holst. In req.user steht dann das GANZE Userobjekt aus der DB. Um auf den Namen zu prüfen müsstest du, falls du Mongoose benutzt etwa sowas dann vergleichen:

Code:
if(req.user.name === "Foo"){
//do something
}

Was du möchtest ist wahrscheinlich Templating.

Ich selber baue viele Apps mit Node(express), MongoDB und Handlebars/Pug(früher JADE).

Du kannst in der Node App eine "View Engine" einstellen, z.B. nimmst du als Viewengine nun Handlebars. Dann lieferst du aber keine HTML Seiten mehr direkt aus, sondern schreibst diese in Handlebarssyntax.
Wenn nun ein User eingeloggt ist(in deinem Falle ja mit Passport) kannst du ihn z.B. auf sein Dashboard leiten.

In der Node App würdest du dann anstatt

Code:
res.redirect('/')

folgendes machen:

Code:
res.render('/dashboard', {user: req.user});

In deiner dashboard.hbs Datei kannst du dann dynamische Sachen anzeigen lassen. Z.B.

Code:
<h1> Willkommen {{user.name}} </h1>

Du lieferst also beim Rendern ein Objekt mit, welches dann in der HBS File unter dem jeweiligen Namen verfügbar ist.

Ich hoffe ich konnte helfen ^^
 
Zuletzt bearbeitet:
Code:
    router.post('/login', passport.authenticate('local'), function(req, res) {
        if(req.user == "Test") {
          res.redirect('/seitefuertest');
          return;
        }
        res.redirect('/');
    });

Nach dem ersten redirect muss noch ein return hin, sonst wird das zweite immer ausgeführt.
 
Zurück
Oben