Files
payloadcms/src/auth/strategies/jwt.js

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