এই প্রশ্নটি অধ্যয়ন করার পরে আমি এখানে আরও একটি বৈশিষ্ট্য সমৃদ্ধ সমাধান তৈরি করেছি:
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
}
স্ট্যাকওভারফ্লো কোড স্নিপেট সরঞ্জামে আমি সেই রানযোগ্য করতে সক্ষম হইনি, তবে আপনি যদি সেই কোডটি চালিয়ে যান তবে আপনি প্রায় কী দেখতে পাবেন তা এখানে:
আমি parseJwt
ফাংশনটি সর্বদা একটি বস্তুকে (স্থায়ী-টাইপিংয়ের কারণে কিছুটা ডিগ্রীতে) ফিরিয়ে দিয়েছি ।
এটি আপনাকে সিনট্যাক্স যেমন:
const { decodedToken, error } = parseJwt(token);
তারপরে আপনি নির্দিষ্ট ধরণের ত্রুটির জন্য রান-টাইমে পরীক্ষা করতে পারেন এবং নামকরণের কোনও সংঘাত এড়াতে পারেন।
যদি কেউ এই কোডটিতে কোনও নিম্ন প্রচেষ্টা, উচ্চ মানের পরিবর্তনের কথা ভাবতে পারে তবে এর উত্তরটির জন্য আমার উত্তরটি সম্পাদনা করতে নির্দ্বিধায় অনুভব করুন next(person)
।