首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSONWebTokens with express-jwt VS passport-jwt

JSONWebTokens with express-jwt VS passport-jwt
EN

Stack Overflow用户
提问于 2015-09-10 23:49:31
回答 1查看 6.4K关注 0票数 9

express-jwt包允许在登录时创建多个身份验证选项(即本地存储或社交媒体OAuth或OpenID提供商等)的巨大灵活性。然后使用JWT保护应用程序。

特别是express-jwt配置,即

代码语言:javascript
复制
app.use(expressJwt({ secret: jwtSecret}).unless({path:['/login']}));

指明了方向。

问题是:我想用来替代登录的许多站点都是通过passport.js最容易访问的。Passport-jwt似乎在幕后使用了jsonwebtokens.js模块,那么有没有一种方法可以配置passport-jwt,使其具有与分别使用jsonwebtokens.js和express-jwt.js一样的灵活性呢?

EN

回答 1

Stack Overflow用户

发布于 2016-05-16 09:19:17

是的有。Passport有许多配置,也就是所谓的策略。其中之一是passport-jwt:https://github.com/themikenicholson/passport-jwt

下面是在API服务器上使用它的一个不错的指南:http://slatepeak.com/guides/building-a-software-as-a-service-saas-startup-pt-2/

这里有一个例子,假设了一个基本的express应用配置。

代码语言:javascript
复制
// init express app as normal..
var app = express();
// dependancies
var passport = require('passport');
var jwt = require('jwt-simple');
var User = require('path/to/your/db/model'); // eg. mongo
// initialize passport
app.use(passport.initialize());
app.use(passport.session());
// configure passport jwt strategy
var JwtStrategy = require('passport-jwt').Strategy;
module.exports = function(passport) {
  // JSON Web Token Strategy
  passport.use(new JwtStrategy({ secretOrKey: 'secret' }, 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);
      });
  }));
};
// now have an authentication route
app.post('/admin/authenticate', function(req, res) {
  User.findOne({
    email: req.body.email
  }, function(err, user) {
    // create jwt token
    var token = jwt.encode(user, 'secret');
    if (err) {
      res.send({success: false, msg: 'error'});
    } else {
      res.json({success: true, token: 'JWT ' + token});
    }  
  });
});
// finally require passport strategy to secure certain routes..
app.get('/admin/getsomedata', passport.authenticate('jwt', {session: false}), successFunction);

回答你的问题--根据我的经验,是的,我认为它提供了很大的灵活性,就像express-jwt一样,如果不是更多的话,它也可以很容易地从你的主代码中抽象出来。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32506412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档