我在JS中遇到一些字符串转换问题。我有一个想要对base64进行编码并存储为客户端Cookie的json对象。看起来很简单,但是由于某种原因,JS atob
不适用于我。我不断收到此错误
InvalidCharacterError:要解码的字符串包含无效字符。
这是我尝试完成的原因的简化版本:
function setCookie(name, value, days) {
var d = new Date;
d.setTime(d.getTime() + 24*60*60*1000*days);
document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString();
}
function getCookie(name) {
var v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
return v ? v[2] : null;
}
function getUser() {
let user = getCookie('ds_user')
if (!user) {
return null
}
return JSON.parse(atob(user))
}
const mockUser = {
user: {
id: "1671",
email: "artvandalay@industries.com",
username: "art",
firstName: "Art",
lastName: "Vandalay",
phone: null,
admin: true,
title: "",
guid: "u0000ZDCF4",
vendorUser: false,
lastLogin: "2019-06-07 18:52:11",
defaultStoreId: "6",
},
store: {
storeId: 6,
name: "Demo Store",
marketId: 13
}
}
setCookie('ds_user', JSON.stringify(btoa(mockUser)), 7)
console.log(getUser())
我的小提琴:https://jsfiddle.net/u1zjsqyn/
我尝试过类似https://stackoverflow.com/a/9786592/5025769之类的帖子中的其他解决方案,但没有运气
答案 0 :(得分:0)
mockUser
是一个对象,当您执行btoa(mockUser)
时,会以[Object, object]
结尾,这是任何对象的字符串版本,因为btoa
无法解析对象。< / p>
您要在转换为Base64之前先对对象进行字符串化处理,然后再取回数据,然后执行您要进行的操作,首先对Base64进行解码,然后解析为对象。
setCookie('ds_user', btoa(JSON.stringify(mockUser)), 7)