2015-09-10 18 views
5

Gói linh hoạt-jwt cho phép linh hoạt trong việc tạo nhiều tùy chọn xác thực khi đăng nhập (tức là lưu trữ cục bộ hoặc các nhà cung cấp OAuth hoặc mạng xã hội, vv) và sau đó bảo vệ ứng dụng bằng JWT.JSONWebTokens với gói cước express-jwt VS passport-jwt

Cấu hình nhanh-JWT đặc biệt ví dụ:

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

cho thấy đường đi.

Câu hỏi đặt ra là: nhiều trang web tôi muốn sử dụng cho các lựa chọn thay thế đăng nhập dễ truy cập nhất thông qua passport.js. Hộ chiếu-jwt dường như sử dụng mô-đun jsonwebtokens.js dưới mui xe để có cách cấu hình hộ chiếu-jwt với tính linh hoạt tương tự có thể thu được với jsonwebtokens.js và express-jwt.js riêng lẻ?

Trả lời

2

Có. Hộ chiếu có nhiều cấu hình, những gì nó thuật ngữ chiến lược. Một trong số đó là hộ chiếu-JWT: https://github.com/themikenicholson/passport-jwt

Dưới đây là một hướng dẫn đàng hoàng để sử dụng nó với một máy chủ API: http://slatepeak.com/guides/building-a-software-as-a-service-saas-startup-pt-2/

Dưới đây là một ví dụ với một cấu hình ứng dụng nhanh cơ bản giả định.

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

Để trả lời câu hỏi của bạn - theo kinh nghiệm của tôi có tôi nghĩ nó cung cấp một sự linh hoạt rất giống nhanh-JWT, nếu không muốn nói nhiều hơn, và có thể được tóm tắt từ mã chính của bạn một cách dễ dàng quá.

Các vấn đề liên quan