Flutter存储的token带前后斜杠与引号 如何删除这些冗余字符?
问题根因
你遇到的冗余字符问题核心是存储token时多余调用了json.encode()方法:body['access_token']本身已经是标准的JWT字符串格式,对普通字符串执行JSON编码操作时,JSON序列化规则会自动给字符串首尾添加双引号,内部的特殊符号也会被添加反斜杠转义,因此读取本地存储的内容时就会出现多余的转义符和包裹引号。
解决方案
方案一:永久修复(推荐)
直接修改token存储逻辑,去掉多余的JSON编码操作,直接存储接口返回的原始token字符串即可:
// 修改前 错误写法 // localStorage.setString('token',json.encode(body['access_token'])); // 修改后 正确写法 localStorage.setString('token', body['access_token']);
修改完成后需要先清除本地已存储的旧错误格式token,重新登录获取新token存储后,读写逻辑就会完全正常。
方案二:临时兼容(无需修改存储逻辑)
如果当前不方便调整存储逻辑,可以在读取token之后先做格式处理,再传入请求头使用,有两种常用处理方式:
- 用JSON解码还原原始字符串
token = json.decode(localStorage.getString('token')!);
- 手动清理冗余字符
// 先清除所有反斜杠,再去掉首尾的双引号 token = localStorage.getString('token')!.replaceAll(r'\', '').replaceAll('"', '');
处理完成后的token就可以直接传入_setHeaders()方法使用,请求头的Bearer字段就不会再携带多余符号。
内容的提问来源于stack exchange,提问作者Daco
相关产品推荐
相关产品推荐

