2014-05-13 54 views
5

我只是實現了一個JSON網絡令牌認證,對我的後端我送這是由jsonwebtoken創建到客戶端以下令牌:JSON網絡令牌不會過期

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

,並在客戶端,我只是將此令牌存儲到SessionStorage。事情是令牌不會在一分鐘後過期,我錯過了什麼嗎?

編輯:我實現了this後顯示相同的東西。

回答

3

令牌不會自動從會話存儲中被刪除。但是,如果您嘗試驗證令牌是否有效,則過期的令牌應該無效。

this tutorial,有效性檢查應該拋出一個異常:

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

    // handle token here 

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

驗證也包含在jsonwebtoken包。這是從文檔:

(同步與回調)返回解碼。如果 簽名(以及可選到期,觀衆,發行人)有效載荷。如果 不是,它將返回錯誤。

+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' });

更新: 有報道問題非標準的使用JavaScript對象,如貓鼬。 5.5.2版本對此有一個修復。更多詳情here。感謝@gugol的通知。確保你傳遞一個普通的對象與你需要的屬性,而不是一個直接的數據庫對象或類似的東西。

+0

哇。這讓我瘋狂。謝謝Marius。 –

+2

我傳遞給它一個對象,但令牌不會過期。我正在使用'expiresIn:60',因爲現在不推薦使用「expiresInMinutes」。 – gugol

+0

@gugol你應該在github上打開一個新的問題,或者在這裏創建一個新的問題,然後用你完整的用法例子。 –