$ npm i egg-passport-jwt --save
// {app_root}/config/plugin.js
exports.passportJwt = {
enable: true,
package: 'egg-passport-jwt',
};
// {app_root}/config/config.default.js
exports.passportJwt = {
secret: 'your jwt secret or key',
};
see passport-jwt for more detail.
Use app.passport.authenticate()
specifying 'jwt'
as the strategy.
// app/router.js
module.exports = app => {
const { router, controller } = app;
const jwt = app.passport.authenticate('jwt', { session: false, successReturnToOrRedirect: null });
router.get('/', controller.home.index);
router.get('/protected', jwt, controller.home.index);
};
The method of including a JWT in a request depends entirely on the extractor
function you choose. For example, if you use the fromAuthHeaderAsBearerToken
extractor (default), you would include an Authorization
header in your request with the
scheme set to bearer
. e.g.
Authorization: bearer JSON_WEB_TOKEN_STRING...
Use app.passport.verify(async (ctx, user) => {})
hook:
// app.js
module.exports = app => {
app.passport.verify(async (ctx, user) => {
// check user
assert(user.provider, 'user.provider should exists');
assert(user.payload, 'user.payload should exists');
// find user from database
const existsUser = await ctx.model.User.findOne({ id: user.payload.sub });
if (existsUser) return existsUser;
// or you could create a new user
});
};
Please open an issue here.