MotorSignal-App/server/waze_relay/middleware/firebase_auth.js

43 lines
1.1 KiB
JavaScript

const admin = require('firebase-admin');
// Initialize Firebase Admin if not already initialized
try {
if (admin.apps && admin.apps.length === 0) {
admin.initializeApp();
}
} catch (e) {
console.warn('Firebase admin initialization failed:', e.message);
}
/**
* Express middleware to verify Firebase ID tokens.
*/
async function requireAuth(req, res, next) {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({
error: 'authenticationRequired',
message: 'Missing or malformed Authorization header'
});
}
const idToken = authHeader.split('Bearer ')[1];
try {
const decodedToken = await admin.auth().verifyIdToken(idToken);
req.user = decodedToken;
next();
} catch (error) {
console.error('Error verifying Firebase ID token:', error.message);
let errorCode = 'invalidToken';
if (error.code === 'auth/id-token-expired') errorCode = 'expiredToken';
return res.status(401).json({
error: errorCode,
message: 'Invalid or expired Firebase ID token'
});
}
}
module.exports = { requireAuth, admin };