|
const jose = require('jose'); |
|
const passportCustom = require('passport-custom'); |
|
const CustomStrategy = passportCustom.Strategy; |
|
const User = require('../models/User'); |
|
|
|
const joseLogin = async () => |
|
new CustomStrategy(async (req, done) => { |
|
const authHeader = req.headers.authorization; |
|
|
|
if (!authHeader || !authHeader.startsWith('Bearer ')) { |
|
return done(null, false, { message: 'No auth token' }); |
|
} |
|
|
|
const token = authHeader.split(' ')[1]; |
|
|
|
try { |
|
const secret = new TextEncoder().encode(process.env.JWT_SECRET); |
|
const { payload } = await jose.jwtVerify(token, secret); |
|
|
|
const user = await User.findById(payload.id); |
|
if (user) { |
|
done(null, user); |
|
} else { |
|
console.log('JoseJwtStrategy => no user found'); |
|
done(null, false, { message: 'No user found' }); |
|
} |
|
} catch (err) { |
|
if (err?.code === 'ERR_JWT_EXPIRED') { |
|
console.error('JoseJwtStrategy => token expired'); |
|
} else { |
|
console.error('JoseJwtStrategy => error'); |
|
console.error(err); |
|
} |
|
done(null, false, { message: 'Invalid token' }); |
|
} |
|
}); |
|
|
|
module.exports = joseLogin; |
|
|