2016-06-15 3 views
1

Angenommen, ich den Code wie dieses:Wie benutze ich dieselbe Pass-Strategie für verschiedene Routen?

var api1 = require('api1'); 
var api2 = require('api2'); 
var app = express(); 
app.use('/api1', api1); 
app.use('/api2', api2); 

Hier ist der Code für API1 Modul ist:

var router = express.Router(); 
var options = { 
    jwtFromRequest:ExtractJwt.fromAuthHeader(), 
    secretOrKey:config.JWTSecret, 
    algorithms:['HS256'] 
} 

passport.use(new JwtStrategy(options, function(jwt_payload, verify) { 
    //here I look for the user in database No.1 
})); 
router.post('/files', passport.authenticate('jwt', { session: false}), function(req, res) { 
    //... 
} 
module.exports = router; 

Und das ist der Code für api2 Modul ist:

var router = express.Router(); 
var options = { 
    jwtFromRequest:ExtractJwt.fromAuthHeader(), 
    secretOrKey:config.JWTSecret, 
    algorithms:['HS256'] 
} 

passport.use(new JwtStrategy(options, function(jwt_payload, verify) { 
    //here I look for the user in database No.2 
})); 
router.post('/files', passport.authenticate('jwt', { session: false}), function(req, res) { 
    //... 
} 
module.exports = router; 

Diese arbeite nicht. In beiden Fällen, wenn ich POST auf "/ api1/files" und "/ api2/files" setze, wird nach dem Benutzer in der Datenbank No2 gesucht. Wenn es keine Lösung für dieses Problem gibt, was sind die anderen möglichen Ansätze für den Umgang mit dieser Art von Problem mit pass.js api?

+0

Ich bin nicht wirklich klar, was Sie fragen. Wollen Sie damit sagen, dass die beiden APIs unterschiedliche Benutzergruppen haben und die Datenbanken mit den Benutzern vollständig voneinander trennen? – Paul

Antwort

6

Der Trick ist die Verwendung der genannten Strategie-Syntax. Grundsätzlich, wenn Sie passport.use() aufrufen, können Sie einen optionalen ersten Parameter übergeben, der dem Pass den Namen der Strategie mitteilt, und dann diesen Namen (und nicht den Standardwert) mit dem authenticate Aufruf verwenden. Also in Ihrem Fall könnten Sie so etwas wie:

passport.use('jwt-1', new JwtStrategy(options, function(jwt_payload, verify) { 
    //here I look for the user in database No.1 
})); 

router.post('/files', passport.authenticate('jwt-1', { session: false}), function(req, res) { 
    //... 
} 

Ihre api2 würde dann seine Strategie nennen ‚jwt-2‘ oder was auch immer für Sie Sinn macht.

+0

Vielen Dank. Genau das habe ich gesucht. –

+0

Wie würde man das für den 'pass.serializeUser' und den' pass.deserializeUser' machen? – mbacvanski

Verwandte Themen