You need to enable JavaScript to run this app. Angular中如何从localStorage的嵌套数组中提取access和refresh token值
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何从localStorage的嵌套数组中提取access和refresh token值

解决方案

核心原因

localStorage 仅支持存储字符串类型数据,直接存入对象/数组时,JS会自动将其转换为字符串格式,导致无法直接读取嵌套属性。

1 先修正存储逻辑

存入非字符串类型数据时,需先通过JSON.stringify()序列化为标准JSON字符串,修改登录成功后的存储代码:

let authObservable: Observable<any>;
authObservable = this._authService.login(this.f.email.value, this.f.password.value);
authObservable.subscribe(
  result=> {
    localStorage.setItem('id', result['id']);
    localStorage.setItem('username', result['username']);
    localStorage.setItem('email', result['email']);
    // 嵌套对象转JSON字符串后再存储
    localStorage.setItem('tokens', JSON.stringify(result['tokens'])); 
  }
)

2 读取时反序列化

取出数据时用JSON.parse()将JSON字符串转回原始对象,即可直接读取内部属性:

// 读取并转成对象,空值时默认给空对象避免解析报错
const tokens = JSON.parse(localStorage.getItem('tokens') || '{}');
// 直接读取属性,可选加空值兼容
const access_token = tokens?.access ?? '';
const refresh_token = tokens?.refresh ?? '';

严谨容错写法(推荐)

增加异常捕获避免无效JSON数据导致页面崩溃:

let access_token = '';
let refresh_token = '';
try {
  const tokensStr = localStorage.getItem('tokens');
  if (tokensStr) {
    const tokens = JSON.parse(tokensStr);
    access_token = tokens.access || '';
    refresh_token = tokens.refresh || '';
  }
} catch (err) {
  // 解析失败时清空无效的旧存储
  localStorage.removeItem('tokens');
}

内容的提问来源于stack exchange,提问作者Muzaffar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 15:36:02