我有一個token存盤在 中localStorage,我還有一個方法來驗證令牌是否正確,如您在此代碼中所見:
let token = localStorage.getItem('token');
console.log(token);
if ( !token )
{
return null;
}
const parts = token.split('.');
if ( parts.length !== 3 )
{
throw new Error('error');
}
....
如果令牌是undefined我將回傳空值,否則繼續驗證。
有兩個問題我無法理解:
- 為什么我重繪 頁面時丟失了localStorage中的token
- 為什么
if ( !token )在token是undefined的時候回傳false ,第一個console.log回傳undefined,但是我的方法繼續const parts = token.split('.');。
uj5u.com熱心網友回復:
本地存盤僅適用于字串。
MDN:Window.localStorage
使用 localStorage 存盤的鍵和值始終采用 UTF-16 DOMString 格式,每個字符使用兩個位元組。與物件一樣,整數鍵會自動轉換為字串。
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
因此,每個值都被序列化為字串。
localStorage.setItem('token', undefined);
let token = localStorage.getItem('token');
console.log(token);
console.log(typeof(token));
在控制臺列印出來:
undefined
string
結論:
- 不要將
null和存盤undefined在本地存盤中。 - 驗證本地存盤中的值時,始終將其視為
string值。
筆記:
false默認情況下應回傳驗證。并且只有在成功的情況下才應該回傳true。- 你不應該在本地存盤中存盤任何令牌,它不安全。
- 您不應在客戶端上驗證任何內容,因為驗證邏輯很容易操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/401767.html
標籤:javascript 有角的 打字稿 不明确的
上一篇:與Typescript中的“extends”關鍵字混淆
下一篇:Reactjs回應式渲染串列
