JS-atob()要解码的字符串包含无效字符

时间:2019-06-07 21:37:42

标签: javascript

我在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之类的帖子中的其他解决方案,但没有运气

1 个答案:

答案 0 :(得分:0)

mockUser是一个对象,当您执行btoa(mockUser)时,会以[Object, object]结尾,这是任何对象的字符串版本,因为btoa无法解析对象。< / p>

您要在转换为Base64之前先对对象进行字符串化处理,然后再取回数据,然后执行您要进行的操作,首先对Base64进行解码,然后解析为对象。

setCookie('ds_user', btoa(JSON.stringify(mockUser)), 7)

FIDDLE