File size: 1,085 Bytes
6c92900
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
/**
 * src/middleware/authMiddleware.ts
 *
 * Firebase Auth middleware โ€” ูŠุชุญู‚ู‚ ู…ู† ุงู„ู€ ID Token ููŠ ูƒู„ request.
 * ุงู„ูˆุงุฌู‡ุฉ ุจุชุจุนุช: Authorization: Bearer <firebase-id-token>
 */

import { Request, Response, NextFunction } from 'express';
import admin from 'firebase-admin';
import { logger } from '../utils/logger';

export async function requireFirebaseAuth(
  req: Request,
  res: Response,
  next: NextFunction
): Promise<void> {
  const authHeader = req.headers['authorization'];

  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    res.status(401).json({ error: 'Missing Authorization header' });
    return;
  }

  const idToken = authHeader.slice(7);

  try {
    const decoded = await admin.auth().verifyIdToken(idToken);
    // ู†ุถูŠู ุงู„ู€ uid ุนู„ู‰ ุงู„ู€ request ุนุดุงู† ู†ุณุชุฎุฏู…ู‡ ู„ูˆ ู…ุญุชุงุฌูŠู†
    (req as Request & { uid: string }).uid = decoded.uid;
    next();
  } catch (err) {
    logger.warn(`AuthMiddleware: invalid token โ€” ${String(err)}`);
    res.status(401).json({ error: 'Invalid or expired token' });
  }
}