Mục tiêu tạo middleware
-
Đọc token từ Authorization: Bearer <idToken>
-
Xác minh với Firebase Admin SDK\
-
Gắn thông tin người dùng vào req.user
-
Nếu không hợp lệ → trả về 401 Unauthorized
1. Tạo file middlewares/auth.middleware.js
const admin = require('../firebase/firebase.config'); const authMiddleware = async (req, res, next) => { const authHeader = req.headers.authorization; if (!authHeader || !authHeader.startsWith('Bearer ')) { return res.status(401).json({ error: 'Authorization token missing or malformed' }); } const idToken = authHeader.split('Bearer ')[1]; try { const decodedToken = await admin.auth().verifyIdToken(idToken); // Gắn thông tin user vào req để sử dụng sau req.user = { uid: decodedToken.uid, email: decodedToken.email, name: decodedToken.name, picture: decodedToken.picture, role: decodedToken.role || 'user', // nếu bạn muốn xử lý vai trò người dùng }; next(); // chuyển tiếp sang controller } catch (err) { return res.status(401).json({ error: 'Invalid or expired token', details: err.message }); }
}; module.exports = authMiddleware;
2. Cách sử dụng trong route
const express = require('express');
const router = express.Router();
const cartController = require('../controllers/cart.controller');
const authMiddleware = require('../middlewares/auth.middleware'); // Yêu cầu phải đăng nhập mới được xem giỏ hàng
router.get('/my-cart', authMiddleware, cartController.getCartForCurrentUser);
Trong controller
exports.getCartForCurrentUser = async (req, res) => { const userId = req.user.uid; const cart = await Cart.findOne({ where: { userId }, include: [Book], }); if (!cart) { return res.status(404).json({ message: 'Cart not found' }); } res.json(cart);
};
Bài viết ở giai đoạn sơ khai, lưu lại quá trình mình học tập cho bài tập lớn. Mọi sai sót sẽ được cập nhật trong thời gian sớm nhất.
Nhiên.