2015-09-10 7 views
5

express-jwtパッケージを使用すると、ログイン時(ローカルストレージまたはソーシャルメディアOAuthまたはOpenIDプロバイダなど)に複数の認証オプションを作成し、JWTでアプリケーションを保護することができます。express-jwt VS passport-jwtを使用したJSONWebTokens

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

すなわち特に明示-JWT構成は方法を示しています。

質問:私がログインの選択肢に使用したいサイトの多くは、passport.jsから最も簡単にアクセスできます。 Passport-jwtはjsonwebtokens.jsモジュールを使用しているようですので、jsonwebtokens.jsとexpress-jwt.jsを個別に入手するのと同じ柔軟性でpassport-jwtを設定する方法はありますか?

答えて

2

はいあります。パスポートには多くの構成があり、戦略という用語があります。ここで

https://github.com/themikenicholson/passport-jwtは、APIサーバでそれを使用するためのまともなガイドです:http://slatepeak.com/guides/building-a-software-as-a-service-saas-startup-pt-2/ここ

を想定し、基本的な特急アプリの設定と例である者の一つは、パスポート・JWTです。

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

あなたの質問に答えるために - 私の経験ではそう私はそれが明示-JWT、そうでない場合よりのような多くの柔軟性を提供していますと思うし、簡単すぎて、あなたのメインのコードから抽象化することができます。

関連する問題