2017-06-01 2 views
0

Also grundsätzlich möchte ich ein JWT-Token in einem Cookie speichern, so dass später zugegriffen werden kann, um API-Aufrufe zu authentifizieren. Ich kann nicht herausfinden, wie das geht.Speichern Sie ein JWT als Cookie

passport.use(new LocalStrategy(
     function(email, password, done) { 
     User.getUserByEmail(email, function(err, user){ 
     if(err) throw err; 
     if(!user){ 
      return done(null, false, {message: 'Unknown User'}); 
     } 

     User.comparePassword(password, user.password, function(err, isMatch){ 
      if(err) throw err; 
      if(isMatch){ 

      const token = jwt.sign(user, config.secret, { 
       expiresIn: 604800 // 1 week 
      }); 

        //STORE TOKEN AS A COOKIE 

       return done(null, user); 
      } else { 
       return done(null, false, {message: 'Invalid password'}); 
      } 
     }); 
     }); 
     } 
    )); 
    router.post('/login', 
     passport.authenticate('local', {successRedirect:'/', failureRedirect:'/users/login',failureFlash: true}), 
     function(req, res) { 
     res.redirect('/'); 
     }); 

Vielen Dank im Voraus, Ed.

+0

Sind Sie ausdrücklich oder schlicht Knoten verwenden? –

Antwort

2

Nach dem Lesen der Dokumentation scheint dies nicht der beste Ort zu sein, um jwt-Cookies zu setzen. Dazu benötigen Sie Zugriff auf das Antwortobjekt. Vielleicht könnten Sie den Cookie mit einer anderen Middleware-Funktion direkt nach Ihrer Authentifizierungs-Middleware auf Ihrer POST-Route setzen?

router.post('/login', 
     passport.authenticate('local', {successRedirect:'/', failureRedirect:'/users/login',failureFlash: true}), 
     setJWTFn, //insert middlelware here 
     function(req, res) { 
     res.redirect('/'); 
     }); 

wo die setJTWFn sieht ungefähr so ​​aus:

function setJWTFn(req, res, next) { 
    //create JWT 
    const jwt = createJWT(); 
    res.cookie('jwt', jwt); 
    next(); 
} 
+0

Es scheint zu arbeiten, kämpfte mit diesem seit Ewigkeiten. Danke, also so sehr, du bist der Beste! –