2017-05-14 2 views
1

Ich bin neu auszudrücken und ich versuche Sitzung zu erstellen, wenn sich der Benutzer bei meiner App anmeldet.Ich benutze Passport für die Authentifizierung. Um mich einzuloggen, erstelle ich eine grundlegende Strategie und beim Erfolg der grundlegenden Strategie. Ich erstelle ein JWT-Token, das ich auf der Client-Seite in einem Cookie ablege, und ich benutze die JWT-Strategie für nachfolgende Anfragen.Express erstellt unterschiedliche Sitzung, wenn Auth-Header geändert wird

Aber ich bemerke, dass Express-Sitzung erstellt eine Sitzung, wenn ich mich anmelden, die Basic-Header und eine weitere Sitzung für nachfolgende Anrufe, die JWT-Header hat.

Hier ist mein Code, wo ich Sitzung auf Login

signin = function(req, res, next) { 
    passport.authenticate('basic', function(err, user, info) { 
     if (err) { return next(err) } 
     if (!user) { 
      return res.status(401).json({ error: 'message' }); 
     } 
     var token = jwt.encode({ user: user}, config.db.secret); 
     res.cookie('token', token, { maxAge: 900000, httpOnly: true, path: '\/', Secure: true }); 
     res.status(200).json({ success: true, firstName: user.firstName }); 
     delete user.password; 
     req.session.user = user; 
     req.session.save(); 
    })(req, res, next); 
}; 

speichere Aber wenn ich diesen Code debuggen es ein sessionID in req.sessionID zeigt und es unterschiedliche sessionID in req.sessionID im folgenden Code zeigen die als JWT-Authentifizierung

Ich erwarte, dass es die gleiche sessionID während des gesamten Lebenszyklus bleibt, bis der Benutzer sich von meiner App abmeldet. Warum passiert das genau? Was ist die Lösung dafür?

+0

Können Sie den Code hinzufügen, wo Sie Express-Sitzung und Passmiddle zu Ihrer App hinzufügen? – arboreal84

Antwort

1

Sie senden die Antwort vor dem Speichern der Sitzung.

Versuchen Sie, die Sitzung zu speichern, und senden Sie dann die Antwort.

express-session modifiziert res.end es express-session spezifischen Aufgaben Einführung der sequentiellen Kopplung Sie waren Opfer machen ausführen: https://github.com/expressjs/session/blob/master/index.js#L249

+0

Ich versuche es.aber kein Glück. –

+0

'session.save' ist ** asynchron **, dh es dauert ein Callback. Fügen Sie den Antwortcode in den Rückruf ein. zB: 'req.session.save (funktion (err) {if (err) {return next (err);} res.status (200) .json (...)});' – arboreal84

+0

immer noch Nein. Soweit Ich verstehe pass.session und express.session sollte es selbständig behandeln. Aber irgendwie funktioniert es nicht in meinem Fall. –

Verwandte Themen