TypeScript में प्रमाणीकरण और अधिकारिता: पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

TypeScript में प्रमाणीकरण और अधिकारिता: पूर्ण गाइड

आधुनिक वेब डेवलपमेंट में एप्लिकेशन सुरक्षा एक महत्वपूर्ण पहलू है। TypeScript, JavaScript का एक सुपरसेट, टाइप-सेफ और सुरक्षित प्रमाणीकरण (Authentication) और अधिकारिता (Authorization) सिस्टम बनाने के लिए शक्तिशाली टूल प्रदान करता है। इस लेख में हम मुख्य अवधारणाओं, लोकप्रिय लाइब्रेरीज़ और TypeScript में व्यावहारिक उदाहरणों को समझेंगे।

मुख्य अवधारणाएँ

कोड पर जाने से पहले, इन दो शब्दों के बीच अंतर समझना ज़रूरी है:

  • प्रमाणीकरण (Authentication) — उपयोगकर्ता की पहचान सत्यापित करना (आप कौन हैं?)। यह आमतौर पर लॉगिन/पासवर्ड, टोकन या बायोमेट्रिक्स के माध्यम से किया जाता है।
  • अधिकारिता (Authorization) — पहुँच अधिकार निर्धारित करना (आप क्या कर सकते हैं?)। उदाहरण के लिए, केवल "admin" भूमिका वाले उपयोगकर्ता को एडमिन पैनल तक पहुँच देना।

TypeScript के लिए लोकप्रिय लाइब्रेरीज़

TypeScript/Node.js इकोसिस्टम में कई सिद्ध समाधान उपलब्ध हैं:

  • Passport.js — प्रमाणीकरण रणनीतियों (local, JWT, OAuth) के लिए सबसे लोकप्रिय लाइब्रेरी। @types/passport के माध्यम से TypeScript का उत्कृष्ट समर्थन।
  • jsonwebtoken — JWT (JSON Web Tokens) के साथ काम करने के लिए। पूरी तरह से टाइप-सेफ।
  • bcrypt — पासवर्ड हैशिंग के लिए। अन्य लाइब्रेरीज़ के साथ उपयोग किया जाता है।
  • express-session — सर्वर पर सत्र प्रबंधन के लिए।

उदाहरण 1: JWT के साथ बुनियादी प्रमाणीकरण

एक्सेस टोकन के साथ एक सरल सिस्टम बनाते हैं। डिपेंडेंसी इंस्टॉल करें:

npm install express jsonwebtoken bcrypt @types/express @types/jsonwebtoken @types/bcrypt

रजिस्ट्रेशन और लॉगिन के साथ सर्वर बनाएँ:

import express, { Request, Response } from 'express';
import jwt from 'jsonwebtoken';
import bcrypt from 'bcrypt';

const app = express();
app.use(express.json());

const SECRET_KEY = 'your-secret-key';
const users: { username: string; passwordHash: string }[] = [];

// रजिस्ट्रेशन
app.post('/register', async (req: Request, res: Response) => {
  const { username, password } = req.body;
  const passwordHash = await bcrypt.hash(password, 10);
  users.push({ username, passwordHash });
  res.status(201).json({ message: 'User created' });
});

// लॉगिन
app.post('/login', async (req: Request, res: Response) => {
  const { username, password } = req.body;
  const user = users.find(u => u.username === username);
  if (!user) return res.status(401).json({ error: 'Invalid credentials' });

  const isValid = await bcrypt.compare(password, user.passwordHash);
  if (!isValid) return res.status(401).json({ error: 'Invalid credentials' });

  const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
  res.json({ token });
});

// सुरक्षित रूट
app.get('/protected', (req: Request, res: Response) => {
  const authHeader = req.headers.authorization;
  if (!authHeader) return res.status(401).json({ error: 'No token provided' });

  const token = authHeader.split(' ')[1]; // Bearer token
  try {
    const decoded = jwt.verify(token, SECRET_KEY);
    res.json({ message: 'Access granted', user: decoded });
  } catch {
    res.status(403).json({ error: 'Invalid token' });
  }
});

app.listen(3000, () => console.log('Server running on port 3000'));

उदाहरण 2: भूमिकाओं के साथ अधिकारिता के लिए Middleware

भूमिका-आधारित मॉडल जोड़ें। टाइप-सेफ middleware बनाएँ:

interface JwtPayload {
  username: string;
  role: 'user' | 'admin';
}

// प्रमाणीकरण जाँच के लिए Middleware
function authenticate(req: Request, res: Response, next: Function) {
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) return res.status(401).json({ error: 'Unauthorized' });

  try {
    const decoded = jwt.verify(token, SECRET_KEY) as JwtPayload;
    (req as any).user = decoded;
    next();
  } catch {
    res.status(403).json({ error: 'Forbidden' });
  }
}                    

अनुशंसाएँ