当我的API返回会话令牌时,我使用以下函数将其保存在本地存储中:
export const storeItem = (key: string, item: any) => {
if (!localStorage) return;
try {
return localStorage.setItem(key, JSON.stringify(item));
} catch (err) {
console.error(`Error storing item ${key} to localStoragee`, err);
}
};
我呼唤我的React Redux动作:
storeItem('authToken', resp.data.token);
更奇怪的是,当令牌保存在我的本地存储中并在chrome开发工具中查看时,令牌用双引号引起来,例如:
"abc123"
然后,当我在查询字符串中将此令牌传递给我的API时,它看起来像:
token="abc"
(但双引号使用%22编码)
为什么会发生这种情况?我该如何删除引号?
更新 我正在建立这样的查询字符串:
let authToken = localStorage.getItem('authToken');
let url = API_ROOT + '/sessions/destroy?token=' + authToken;
export const getItemFromStorage = (key: string) => {
if (!localStorage) return;
try {
return JSON.parse(localStorage.getItem(key));
} catch (err) {
console.error(`Error getting item ${key} from localStorage`, err);
}
};
答案 0 :(得分:4)
您要字符串化为JSON(其中会添加"
),而不是解析。
读取localStorage时,您应该解析(但是看起来没用)。或者只是存储字符串而不将其编码为JSON。