javascript - 带有 express-jwt 的 JSONWebTokens VS passport-jwt

标签 javascript authentication express passport.js

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

特别是 express-jwt 配置,即

app.use(expressJwt({ secret: jwtSecret}).unless({path:['/login']}));

指明道路。

问题是:许多我想用于替代登录的网站最容易通过 passport.js 访问。 Passport-jwt 似乎在幕后使用了 jsonwebtokens.js 模块,那么有没有一种方法可以配置 passport-jwt,其灵 active 与 jsonwebtokens.js 和 express-jwt.js 分别获得的灵 active 相同?

最佳答案

是的。 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 应用程序配置的示例。

// 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);

回答您的问题 - 根据我的经验,是的,我认为它提供了很多灵 active ,如 express-jwt,如果不是更多的话,并且也可以很容易地从您的主要代码中抽象出来。

关于javascript - 带有 express-jwt 的 JSONWebTokens VS passport-jwt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32506412/

相关文章:

javascript - 在新页面上链接 href 和调用函数

node.js - 使用 CORS 的 LocomotiveJs 的 Rest API。适用于本地计算机,但不适用于 Amazon 或 Heroku

node.js - 表达体解析器

mysql - POST 表达 React 表单中的数据

javascript - 如何构建滑动水平菜单。 CSS

javascript - Ag-grid 不将行焦点保持在表刷新上

javascript - 简单的 Mongoose 填充似乎不起作用

用于数据仓库身份验证的 Azure AD

Android - Firebase 身份验证不适用于电子邮件/密码设置

authentication - http服务器认证