Clo*_*een 7 javascript authentication express passport.js
express-jwt软件包允许在登录时创建多个身份验证选项(即本地存储或社交媒体OAuth或OpenID提供程序等),然后使用JWT保护应用程序,具有极大的灵活性.
特别是express-jwt配置即
app.use(expressJwt({ secret: jwtSecret}).unless({path:['/login']}));
Run Code Online (Sandbox Code Playgroud)
显示方式.
问题是:我想用于登录备选方案的许多站点最容易通过passport.js访问.Passport-jwt似乎使用了引擎盖下的jsonwebtokens.js模块,那么有没有一种配置passport-jwt的方法具有相同的灵活性,可以通过jsonwebtokens.js和express-jwt.js单独获得?
就在这里。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);
Run Code Online (Sandbox Code Playgroud)
回答你的问题 - 根据我的经验,是的,我认为它提供了很多灵活性,比如 express-jwt,如果不是更多的话,并且也可以很容易地从你的主代码中抽象出来。