45 lines
1.0 KiB
JavaScript
45 lines
1.0 KiB
JavaScript
const passportJwt = require('passport-jwt');
|
|
const getExtractJWT = require('../getExtractJWT');
|
|
|
|
const JwtStrategy = passportJwt.Strategy;
|
|
|
|
module.exports = ({ config, collections, operations }) => {
|
|
const opts = {
|
|
session: false,
|
|
passReqToCallback: true,
|
|
};
|
|
|
|
const extractJWT = getExtractJWT(config);
|
|
|
|
opts.jwtFromRequest = extractJWT;
|
|
opts.secretOrKey = config.secret;
|
|
|
|
return new JwtStrategy(opts, async (req, token, done) => {
|
|
try {
|
|
const collection = collections[token.collection];
|
|
|
|
const userQuery = await operations.collections.find({
|
|
where: {
|
|
email: {
|
|
equals: token.email,
|
|
},
|
|
},
|
|
collection,
|
|
req,
|
|
overrideAccess: true,
|
|
});
|
|
|
|
if (userQuery.docs && userQuery.docs.length > 0) {
|
|
const user = userQuery.docs[0];
|
|
user.collection = collection.config.slug;
|
|
|
|
done(null, user);
|
|
} else {
|
|
done(null, false);
|
|
}
|
|
} catch (err) {
|
|
done(null, false);
|
|
}
|
|
});
|
|
};
|