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