2017-06-01 18 views
0

基本的に、JWTトークンをクッキーに保存して、後でAPIコールを認証するためにアクセスできるようにしたい。私はこれを行う方法を理解することはできません。JWTをクッキーとして保存する

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('/'); 
     }); 

ありがとうございます。

+0

あなたは明示またはプレーンノードを使用していますか? –

答えて

2

ドキュメントを読んだ後、これはjwtクッキーを設定するのに最適な場所ではないようです。これを行うには、レスポンスオブジェクトにアクセスする必要があります。おそらく、あなたのPOSTミドルウェアの認証ミドルウェアの直後に別のミドルウェア機能を使ってクッキーを設定することはできますか?

setJTWFnが何かのように見える
router.post('/login', 
     passport.authenticate('local', {successRedirect:'/', failureRedirect:'/users/login',failureFlash: true}), 
     setJWTFn, //insert middlelware here 
     function(req, res) { 
     res.redirect('/'); 
     }); 

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

これは年を重ねるうちに苦労しているようです。ありがとうございます、あなたは最高です! –

関連する問題