2016-08-26 16 views
3

1)ユーザーが認証されると、ユーザーが各要求でユーザー名パスワードを送信しないように、トークンをCookieに設定するにはどうすればよいですか?Node.js passport-jwtクッキーにトークンを送信する方法は?

2)トークンをclineに送る理想的な方法は何ですか?

apiRoutes.post('/authenticate', function (req, res) { 
     User.findOne({ 
      email: req.body.email 
     }, function (err, user) { 
      if (err) throw err; 

      if (!user) { 
       res.send({ success: false, message: 'Authentication failed. User not found.' }); 
      } else { 
       // Check if password matches 
       user.comparePassword(req.body.password, function (err, isMatch) { 
        if (isMatch && !err) { 
         // Create token if the password matched and no error was thrown 
         var claims = { 
          sub: user._id, 
          email:user.email, 
          iss: 'https://NodeLogin.com', 
          permissions: user.role 
         }; 

         var token = jwt.sign(claims, config.secret, { 
          expiresIn: 60 // in seconds 
         }); 
         res.json({ success: true, token: 'JWT ' + token }); 
        } else { 
         res.send({ success: false, message: 'Authentication failed. Passwords did not match.' }); 
        } 
       }); 
      } 
     }); 
    }); 

    apiRoutes.get('/dashboard', 
     passport.authenticate('jwt', { session: false }), function (req, res) { 
     res.send('Worked' + req.user._id + '.'); 
    }); 

答えて

7

あなたは、コードに従ってください:

user.comparePassword(req.body.password, function (err, isMatch) { 
    if (isMatch && !err) { 
    // Create token if the password matched and no error was thrown 
    var claims = { 
     sub: user._id, 
     email:user.email, 
     iss: 'https://NodeLogin.com', 
     permissions: user.role 
    }; 

    var token = jwt.sign(claims, config.secret, { 
     expiresIn: 60 // in seconds 
    }); 

    res.cookie('jwt',token); // add cookie here 
    res.json({ success: true, token: 'JWT ' + token }); 
    } else { 
    res.send({ success: false, message: 'Authentication failed. Passwords did not match.' }); 
    } 
}); 

とパスポート設定を:それは私のために働いて

var cookieExtractor = function(req) { 
    var token = null; 
    if (req && req.cookies) token = req.cookies['jwt']; 
    return token; 
}; 
module.exports = function(passport) { 
    var opts = {}; 
    opts.jwtFromRequest = cookieExtractor; // check token in cookie 
    opts.secretOrKey = config.secret; 
    passport.use(new JwtStrategy(opts, function(jwt_payload, done) { 
    User.findOne({id: jwt_payload.id}, function(err, user) { 
     if (err) { 
     return done(err, false); 
     } 
     if (user) { 
     done(null, user); 
     } else { 
     done(null, false); 
     } 
    }); 
    })); 
}; 

:)

+0

それは私にも動作します。神はあなたを祝福:)) – durduliu2009

+0

あなたを助けるために喜んで:) –

関連する問題