# JWT-आधारित ऑथ — एक्सप्रेस.जेएस

Source: https://www.geekswithgeeks.com/hi/expressjs/ex-auth-jwt

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

## प्रवाह

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

## लॉगिन route

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

```javascript
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 जोड़ें, फिर जारी रखें।

```javascript
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 पर सर्व करें।
