TypeScript में JWT टोकन: jsonwebtoken लाइब्रेरी के साथ पूरी गाइड
JSON Web Token (JWT) एक ओपन स्टैंडर्ड (RFC 7519) है जो JSON फॉर्मेट पर आधारित एक्सेस टोकन बनाने के लिए उपयोग होता है। JWT का व्यापक रूप से क्लाइंट और सर्वर के बीच ऑथेंटिकेशन और सूचना आदान-प्रदान के लिए उपयोग किया जाता है। TypeScript में, सख्त टाइपिंग के कारण, JWT के साथ काम करना विशेष रूप से सुविधाजनक और सुरक्षित हो जाता है। इस लेख में, हम देखेंगे कि JWT टोकन बनाने, जांचने और प्रबंधित करने के लिए TypeScript में लोकप्रिय jsonwebtoken लाइब्रेरी का उपयोग कैसे करें।
इंस्टॉलेशन और सेटअप
शुरू करने के लिए, आवश्यक पैकेज इंस्टॉल करें:
npm install jsonwebtoken
npm install -D @types/jsonwebtoken
पहला पैकेज लाइब्रेरी है, दूसरा इसके लिए TypeScript टाइप्स है। इंस्टॉल करने के बाद, jwt.service.ts फ़ाइल बनाएं जहां हम टोकन से संबंधित सभी लॉजिक रखेंगे।
JWT टोकन बनाना
jsonwebtoken का मुख्य फंक्शन sign() है। आइए टाइपिंग के साथ इसका उपयोग देखें:
import jwt from 'jsonwebtoken';
interface TokenPayload {
userId: number;
email: string;
role: 'user' | 'admin';
}
const createAccessToken = (payload: TokenPayload): string => {
const secret = process.env.JWT_SECRET || 'default_secret';
const options: jwt.SignOptions = {
expiresIn: '15m', // टोकन 15 मिनट के लिए वैध
algorithm: 'HS256',
};
return jwt.sign(payload, secret, options);
};
महत्वपूर्ण: सीक्रेट की को कभी भी कोड में स्टोर न करें। एनवायरनमेंट वेरिएबल्स (.env फ़ाइल) का उपयोग करें।
टोकन की वेरिफिकेशन और डिकोडिंग
टोकन की प्रामाणिकता जांचने के लिए verify() फंक्शन का उपयोग किया जाता है। यह स्वचालित रूप से सिग्नेचर और एक्सपायरी डेट की जांच करता है:
const verifyToken = (token: string): TokenPayload => {
const secret = process.env.JWT_SECRET || 'default_secret';
try {
const decoded = jwt.verify(token, secret) as TokenPayload;
return decoded;
} catch (error) {
if (error instanceof jwt.TokenExpiredError) {
throw new Error('टोकन समाप्त हो गया है');
}
if (error instanceof jwt.JsonWebTokenError) {
throw new Error('अमान्य टोकन');
}
throw error;
}
};
as TokenPayload टाइप कास्टिंग पर ध्यान दें - यह सुनिश्चित करता है कि TypeScript को डिकोड किए गए डेटा की संरचना पता हो।
Refresh-टोकन: सेशन का विस्तार
व्यवहार में, एक्सेस टोकन कम समय (15-30 मिनट) के लिए वैध होते हैं, इसलिए उन्हें रिफ्रेश करने के लिए एक तंत्र की आवश्यकता होती है। इसके लिए लंबी अवधि वाले रिफ्रेश टोकन का उपयोग किया जाता है:
const createRefreshToken = (payload: TokenPayload): string => {
const secret = process.env.JWT_REFRESH_SECRET || 'refresh_secret';
const options: jwt.SignOptions = {
expiresIn: '7d', // एक सप्ताह
algorithm: 'HS256',
};
return jwt.sign(payload, secret, options);
};
const refreshAccessToken = (refreshToken: string): string => {
const secret = process.env.JWT_REFRESH_SECRET || 'refresh_secret';
try {
const decoded = jwt.verify(refreshToken, secret) as TokenPayload;
// यहां जांच सकते हैं कि रिफ्रेश टोकन डेटाबेस में रद्द तो नहीं हुआ है
return createAccessToken({
userId: decoded.userId,
email: decoded.email,
role: decoded.role,
});
} catch {
throw new Error('अमान्य रिफ्रेश टोकन');
}
};
Express के लिए TypeScript में Middleware
JWT को Express.js के साथ इंटीग्रेट करने के लिए middleware बनाना होता है। यह रहा टाइप किया गया वर्जन:
import { Request, Response, NextFunction } from 'express';
interface AuthRequest extends Request {
user?: TokenPayload;
}
const authMiddleware = (req: AuthRequest, res: Response, next: NextFunction) => {
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return res.status(401).json({ error: 'टोकन प्रदान नहीं किया गया' });
}
const token = authHeader.split(' ')[1];
try {
const decoded = verifyToken(token);
req.user = decoded;
next();
} catch (error) {
return res.status(401).json({ error: error.message });
}
};
इस middleware का उपयोग करके आप अपने Express रूट्स को आसानी से प्रोटेक्ट कर सकते हैं और req.user के माध्यम से यूजर डेटा एक्सेस कर सकते हैं।
पुस्तकालय में भी
Kotlin में XML के साथ कार्य: लाइब्रेरीज़, पार्सिंग और दस्तावेज़ निर्माण
C++ में ZIP/आर्काइव के साथ काम: लाइब्रेरी और कोड उदाहरण
TypeScript में HTML पार्सिंग: लाइब्रेरी, टूल्स और कोड उदाहरण
C# (.NET) के लिए gRPC: लाइब्रेरीज़, सेटअप और कोड उदाहरण