Spaces:
Sleeping
Sleeping
| import jwt from 'jsonwebtoken'; | |
| import { supabase } from '../config/supabase.js'; | |
| export const authMiddleware = async (req, res, next) => { | |
| const token = req.headers.authorization?.split(' ')[1]; | |
| if (!token) return res.status(401).json({ error: 'No token' }); | |
| // Try custom JWT first (email/password login) | |
| try { | |
| req.user = jwt.verify(token, process.env.JWT_SECRET); | |
| return next(); | |
| } catch { | |
| // not a custom token, try Supabase OAuth token | |
| } | |
| // Try Supabase OAuth token (Google login etc.) | |
| try { | |
| const { data: { user }, error } = await supabase.auth.getUser(token); | |
| if (error || !user) throw new Error('Invalid Supabase token'); | |
| req.user = { id: user.id, email: user.email }; | |
| return next(); | |
| } catch { | |
| return res.status(401).json({ error: 'Invalid token' }); | |
| } | |
| }; | |