NodeJS Ngày 3 - Tạo OAuth Authentication Middleware
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.
All rights reserved