Spaces:
Running
Running
File size: 1,352 Bytes
c89bb66 12d3f0e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import { admin } from './firebase.js';
// ── Strict Authentication Middleware ──
export async function requireStrictAuth(req, res, next) {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({
error: 'UNAUTHORIZED',
message: 'Missing Authorization Bearer token header.'
});
}
const token = authHeader.substring(7).trim();
try {
const decodedToken = await admin.auth().verifyIdToken(token);
const uid = decodedToken.uid;
const signInProvider = decodedToken.firebase?.sign_in_provider || '';
const isAnonymous = signInProvider === 'anonymous';
if (isAnonymous) {
return res.status(403).json({
error: 'ANONYMOUS_NOT_ALLOWED',
message: 'Guest/anonymous accounts cannot generate or download resumes. Please sign in or create an account to proceed.'
});
}
req.user = {
uid,
email: decodedToken.email
};
next();
} catch (error) {
console.error('[Auth Error]', error.message);
return res.status(401).json({
error: 'UNAUTHORIZED',
message: 'Invalid or expired Firebase authentication token.'
});
}
}
|