पाठ 19 / 23

JWT-आधारित ऑथ

लॉगिन एक टोकन जारी करता है; एक मिडलवेयर सुरक्षित routes की रक्षा करता है।

प्रवाह

  1. क्लाइंट /login पर credentials भेजता है। 2) सर्वर जाँचता है और एक JWT साइन करता है। 3) क्लाइंट हर आगामी रिक्वेस्ट पर वह टोकन भेजता है। 4) पहुँच देने से पहले एक मिडलवेयर उसे जाँचता है।

लॉगिन route

सफलता पर, user id और expiry लेकर एक टोकन साइन करें।

import jwt from 'jsonwebtoken';

app.post('/login', express.json(), async (req, res) => {
  const { email, password } = req.body;
  const user = await verifyCredentials(email, password); // your own check
  if (!user) return res.status(401).json({ error: 'Invalid credentials' });

  const token = jwt.sign({ sub: user.id }, process.env.JWT_SECRET, { expiresIn: '1h' });
  res.json({ token });
});

एक route की सुरक्षा

Authorization: Bearer <token> हेडर पढ़ें, इसे जाँचें, user जोड़ें, फिर जारी रखें।

function requireAuth(req, res, next) {
  const header = req.headers.authorization || '';
  const token = header.startsWith('Bearer ') ? header.slice(7) : null;
  if (!token) return res.status(401).json({ error: 'No token provided' });

  try {
    req.user = jwt.verify(token, process.env.JWT_SECRET);
    next();
  } catch {
    res.status(401).json({ error: 'Invalid or expired token' });
  }
}

app.get('/me', requireAuth, (req, res) => {
  res.json({ userId: req.user.sub });
});

सीक्रेट को सीक्रेट रखें

JWT_SECRET को कभी हार्डकोड न करें — इसे एनवायरनमेंट वेरिएबल से लोड करें, और ऑथ ट्रैफ़िक को हमेशा HTTPS पर सर्व करें।