2015-09-10 15 views
5

Pakiet express-jwt zapewnia ogromną elastyczność w tworzeniu wielu opcji uwierzytelniania podczas logowania (np. Lokalny magazyn lub portale społecznościowe OAuth lub dostawcy OpenID, itp.), A następnie chroni aplikację za pomocą JWT.JSONWebTokens z express-jwt VS paszport-jwt

Konfiguracja Express JWT zwłaszcza tj

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

przedstawia sposób.

Pytanie brzmi: wiele witryn, które chcę używać w celu uzyskania opcji logowania, jest najłatwiej dostępnych za pośrednictwem pliku passport.js. Wydaje się, że Passport-jwt korzysta z modułu jsonwebtokens.js pod maską, więc czy istnieje sposób na skonfigurowanie passport-jwt z taką samą elastycznością, którą można uzyskać osobno dla jsonwebtokens.js i express-jwt.js?

Odpowiedz

2

Tak, jest. Paszport ma wiele konfiguracji, co określają strategie. Jednym z nich jest paszport-JWT: https://github.com/themikenicholson/passport-jwt

Oto przyzwoity przewodnik używać go z serwera API: http://slatepeak.com/guides/building-a-software-as-a-service-saas-startup-pt-2/

Oto przykład z podstawowego wyraźnej app zakładanego config.

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

Aby odpowiedzieć na to pytanie - z mojego doświadczenia tak myślę, że oferuje elastyczność dużo jak Express-JWT, jeśli nie więcej, i może być oderwane od głównego kodu zbyt łatwo.