2014-05-13 13 views
5

मैं सिर्फ एक JSON वेब टोकन प्रमाणीकरण लागू किया, मेरी बैकएंड पर मैं टोकन जो निम्नलिखित के रूप में ग्राहक के लिए jsonwebtoken द्वारा बनाई गई है भेजें:JSON वेब टोकन समाप्त न हो

var token = jwt.sign(user, secret.secretToken, { expiresInMinutes: 1 }); 
return res.json({ token: token }); 

और क्लाइंट साइड पर मैं बस सत्र स्टोरेज में इस टोकन को स्टोर करें। बात यह है कि टोकन एक मिनट के बाद समाप्त नहीं होता है, क्या मुझे कुछ याद आ रही है?

संपादित करें: मैंने उसी चीज को लागू किया जो this पोस्ट में दिखाया गया है।

उत्तर

3

टोकन स्वचालित रूप से सत्र संग्रहण से हटाया नहीं जाएगा। हालांकि, अगर आप यह सत्यापित करने का प्रयास करते हैं कि टोकन मान्य है, तो समाप्त हो चुके टोकन को अमान्य होना चाहिए।

if (token) { 
    try { 
    var decoded = jwt.decode(token, app.get('jwtTokenSecret')); 

    // handle token here 

    } catch (err) { 
    return next(); 
    } 
} else { 
    next(); 
} 

सत्यापित करें भी jsonwebtoken पैकेज में शामिल है:

this tutorial से, वैधता की जांच करने के लिए एक अपवाद फेंक देना चाहिए। और यह डॉक्स से है:

(कॉलबैक साथ तुल्यकालिक) पेलोड डीकोड अगर हस्ताक्षर (और वैकल्पिक समाप्ति, दर्शकों, जारीकर्ता) मान्य हैं देता है। यदि नहीं है, तो यह त्रुटि वापस कर देगा।

+1

हे डेविन, उत्तर के लिए धन्यवाद। समस्या उनके स्रोत कोड में थी, क्योंकि आप देखते हैं कि समय 1000 से पहले गुणा हो गया है, और उन्होंने इसे 10 दिनों पहले तय किया है https://github.com/auth0/node-jsonwebtoken/commit/44ed992ee58a90db3fc4a05d08cdf8356ba515c1 – anvarik

19

मुझे ऑब्जेक्ट को jwt.sign पर पहला तर्क प्रदान करने के दौरान स्वयं को एक ही समस्या नहीं मिली, उदाहरण के लिए jwt.sign('testuser', secret.secretToken, { expiresIn: '1h' });

jwt.sign का यह गलत उपयोग काम करता है, भले ही यह गलत है, यह केवल प्रदान की गई सेटिंग्स को अनदेखा करता है। https://github.com/auth0/node-jsonwebtoken/issues/64

पहले तर्क के रूप में एक वस्तु प्रदान करने के लिए, की तरह jwt.sign({user: 'testuser'}, secret.secretToken, { expiresIn: '1h' });

अद्यतन सुनिश्चित करें: गैर मानक के उपयोग के साथ वहाँ सूचित किया गया है समस्याओं जावास्क्रिप्ट इस तरह के नेवला से ही वस्तुओं,। संस्करण 5.5.2 के लिए एक फिक्स है। अधिक जानकारी here। नोटिस के लिए धन्यवाद @gugol। सुनिश्चित करें कि आप एक सादे ऑब्जेक्ट को अपनी आवश्यक गुणों के साथ पास करते हैं, न कि प्रत्यक्ष डेटाबेस ऑब्जेक्ट या इसी तरह।

+0

वाह। यह मुझे पागल कर रहा था। धन्यवाद Marius। –

+2

मैं इसे एक ऑब्जेक्ट पास कर रहा हूं और अभी भी टोकन की समयसीमा समाप्त नहीं हुई है। मैं 'expiresIn: 60' का उपयोग कर रहा हूं क्योंकि" expiresInMinutes "अब बहिष्कृत है। – gugol

+0

@gugol आपको अपने पूर्ण उपयोग उदाहरण के साथ, यहां गिटूब पर एक नया मुद्दा खोलना चाहिए या फिर एक नया प्रश्न बनाना चाहिए। –

संबंधित मुद्दे