इस प्रश्न का अध्ययन करने के बाद मैंने एक और सुविधा संपन्न समाधान प्रस्तुत किया है:
const parseJwt = (token) => {
try {
if (!token) {
throw new Error('parseJwt# Token is required.');
}
const base64Payload = token.split('.')[1];
let payload = new Uint8Array();
try {
payload = Buffer.from(base64Payload, 'base64');
} catch (err) {
throw new Error(`parseJwt# Malformed token: ${err}`);
}
return {
decodedToken: JSON.parse(payload),
};
} catch (err) {
console.log(`Bonus logging: ${err}`);
return {
error: 'Unable to decode token.',
};
}
};
यहाँ कुछ उपयोग नमूने हैं:
const unhappy_path1 = parseJwt('sk4u7vgbis4ewku7gvtybrose4ui7gvtmalformedtoken');
console.log('unhappy_path1', unhappy_path1);
const unhappy_path2 = parseJwt('sk4u7vgbis4ewku7gvtybrose4ui7gvt.malformedtoken');
console.log('unhappy_path2', unhappy_path2);
const unhappy_path3 = parseJwt();
console.log('unhappy_path3', unhappy_path3);
const { error, decodedToken } = parseJwt('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c');
if (!decodedToken.exp) {
console.log('almost_happy_path: token has illegal claims (missing expires_at timestamp)', decodedToken);
// note: exp, iat, iss, jti, nbf, prv, sub
}
मैं StackOverflow कोड स्निपेट टूल में उस रन करने योग्य को बनाने में सक्षम नहीं था, लेकिन यहाँ आप लगभग उस कोड को चलाने पर क्या देखेंगे।
मैंने parseJwt
फ़ंक्शन को हमेशा एक वस्तु (कुछ हद तक स्थैतिक-टाइपिंग कारणों के लिए) वापस किया।
यह आपको सिंटैक्स का उपयोग करने की अनुमति देता है जैसे:
const { decodedToken, error } = parseJwt(token);
फिर आप विशिष्ट प्रकार की त्रुटियों के लिए रन-टाइम पर परीक्षण कर सकते हैं और किसी भी नामकरण टकराव से बच सकते हैं।
यदि कोई भी किसी भी कम प्रयास के बारे में सोच सकता है, तो इस कोड में उच्च मूल्य परिवर्तन होता है, बेझिझक मेरे उत्तर को लाभ के लिए संपादित करें next(person)
।