TypeScript में JWT टोकन: पूरी गाइड
JSON Web Token (JWT) — JSON प्रारूप पर आधारित एक्सेस टोकन बनाने के लिए एक खुला मानक (RFC 7519) है। JWT का व्यापक रूप से क्लाइंट और सर्वर के बीच प्रमाणीकरण और सूचना आदान-प्रदान के लिए उपयोग किया जाता है। इस लेख में, हम विस्तार से जानेंगे कि लोकप्रिय लाइब्रेरी और सर्वोत्तम प्रथाओं का उपयोग करके TypeScript में JWT टोकन के साथ कैसे काम करें।
JWT क्या है?
JWT तीन भागों से बना होता है, जो डॉट्स द्वारा अलग किए जाते हैं:
- Header (शीर्षक) — इसमें टोकन के प्रकार और हस्ताक्षर एल्गोरिदम के बारे में जानकारी होती है
- Payload (पेलोड) — इसमें डेटा (claims) होता है, जैसे उपयोगकर्ता ID, भूमिका, समाप्ति तिथि
- Signature (हस्ताक्षर) — शीर्षक, पेलोड और गुप्त कुंजी से बनाया जाता है
एक सामान्य JWT इस तरह दिखता है:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cTypeScript में JWT के साथ काम करने के लिए लाइब्रेरी स्थापित करना
TypeScript में JWT के साथ काम करने के लिए हम jsonwebtoken लाइब्रेरी का उपयोग करेंगे, साथ ही @types/jsonwebtoken प्रकारों के साथ।
npm install jsonwebtokennpm install --save-dev @types/jsonwebtokenTypeScript में JWT टोकन बनाना
टाइप किए गए पेलोड के साथ JWT टोकन बनाने का एक उदाहरण देखें:
import jwt from 'jsonwebtoken';
// पेलोड के लिए इंटरफ़ेस परिभाषित करेंinterface TokenPayload { userId: string; email: string; role: 'user' | 'admin';}
// गुप्त कुंजी (वास्तविक प्रोजेक्ट में .env में स्टोर करें)const JWT_SECRET = 'your-super-secret-key';
// टोकन बनाएंfunction generateToken(payload: TokenPayload): string { return jwt.sign(payload, JWT_SECRET, { expiresIn: '1h', // टोकन 1 घंटे के लिए मान्य है issuer: 'pythonlib.ru', subject: payload.userId });}
// उपयोग का उदाहरणconst userPayload: TokenPayload = { userId: '12345', email: 'user@example.com', role: 'user'};
const token = generateToken(userPayload);console.log('जनरेट किया गया टोकन:', token);JWT का सत्यापन और डिकोडिंग
टोकन की प्रामाणिकता जांचने और डेटा निकालने के लिए निम्नलिखित कोड का उपयोग करें:
import jwt, { JwtPayload, VerifyErrors } from 'jsonwebtoken';
interface DecodedToken extends JwtPayload { userId: string; email: string; role: 'user' | 'admin';}
function verifyToken(token: string): DecodedToken | null { try { const decoded = jwt.verify(token, JWT_SECRET) as DecodedToken; return decoded; } catch (error) { if (error instanceof jwt.TokenExpiredError) { console.error('टोकन समाप्त हो गया'); } else if (error instanceof jwt.JsonWebTokenError) { console.error('अमान्य टोकन'); } else { console.error('सत्यापन त्रुटि:', error); } return null; }}
// टोकन जांचेंconst decoded = verifyToken(token);if (decoded) { console.log('टोकन डेटा:', decoded); console.log('उपयोगकर्ता भूमिका:', decoded.role);}Express.js के लिए TypeScript के साथ Middleware
पूर्ण टाइपिंग के साथ Express middleware में JWT जांच को एकीकृत करें:
import { Request, Response, NextFunction } from 'express';import jwt from 'jsonwebtoken';
// उपयोगकर्ता डेटा संग्रहीत करने के लिए Request इंटरफ़ेस का विस्तार करेंinterface AuthRequest extends Request { user?: { userId: string; email: string; role: 'user' | 'admin'; };}
function authMiddleware(req: AuthRequest, res: Response, next: NextFunction): void { const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) { res.status(401).json({ message: 'टो