File manager - Edit - /home/webapp69.cm.in.th/u69319090038/Shop/middleware/authMiddleware.js
Back
const jwt = require('jsonwebtoken'); require('dotenv').config(); // ─── Verify Access Token ───────────────────────────────────────────────────── exports.verifyToken = (req, res, next) => { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; // "Bearer <token>" if (!token) { return res.status(401).json({ success: false, message: 'Access denied. No token provided.', code: 'NO_TOKEN' }); } try { const decoded = jwt.verify(token, process.env.JWT_ACCESS_SECRET); req.user = decoded; // { id, username, role, iat, exp } next(); } catch (err) { if (err.name === 'TokenExpiredError') { return res.status(401).json({ success: false, message: 'Access token expired.', code: 'TOKEN_EXPIRED' }); } return res.status(403).json({ success: false, message: 'Invalid access token.', code: 'INVALID_TOKEN' }); } }; // ─── Role-Based Access Control ─────────────────────────────────────────────── exports.requireRole = (...roles) => { return (req, res, next) => { if (!req.user) { return res.status(401).json({ success: false, message: 'Not authenticated.', code: 'NOT_AUTHENTICATED' }); } if (!roles.includes(req.user.role)) { return res.status(403).json({ success: false, message: `Access restricted. Required role(s): ${roles.join(', ')}.`, code: 'FORBIDDEN', }); } next(); }; }; // ─── Optional Auth (don't block, just attach user if token present) ────────── exports.optionalAuth = (req, res, next) => { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; if (token) { try { req.user = jwt.verify(token, process.env.JWT_ACCESS_SECRET); } catch (_) { /* ignore expired/invalid for optional routes */ } } next(); };
| ver. 1.4 |
Github
|
.
| PHP 7.4.33 | Generation time: 0.23 |
proxy
|
phpinfo
|
Settings