Angular 12严格模式下Local Storage使用问题求助
解决Angular严格模式下LocalStorage用户登录判断问题
嘿,我来帮你搞定这个问题~咱们先把问题的根源理清楚:
你现在的代码里,用JSON.parse(localStorage.getItem('user') || '{}'),当没有用户登录时,localStorage.getItem('user')返回null,这时候|| '{}'会把它转换成空字符串'{}',解析后得到的是空对象{},而不是null。你的判断条件是user !== null,空对象当然不等于null,所以这个getter永远返回true,这就是问题所在啦!
下面是符合严格模式要求,又能正确判断登录状态的解决方案:
get isLoggedIn(): boolean { // 先获取本地存储的用户字符串,不着急加默认值 const userString = localStorage.getItem('user'); // 如果没有存储用户数据,直接返回false if (!userString) { return false; } // 解析用户数据(严格模式下这里不会报错,因为已经确保userString不是null) const user = JSON.parse(userString); // 判断解析后的用户对象是否有效:不是空对象才算登录状态 // 如果你的用户对象有特定标识(比如uid、email),可以更精准判断,比如return !!user?.uid; return user && Object.keys(user).length > 0; }
为什么这个方案可行?
- 严格模式兼容:先判断
userString是否存在,避免了直接对null调用JSON.parse导致的报错,完全符合严格模式的要求。 - 逻辑正确:当没有用户数据时直接返回
false;如果有存储数据,再判断是不是有效的用户对象(空对象会被排除),这样就能准确识别登录状态了。
如果你登录后存储的用户对象有固定的字段(比如Firebase返回的用户会有uid字段),还可以把判断条件改成更精准的return !!user?.uid;,这样能进一步避免空对象或无效数据的干扰。
内容的提问来源于stack exchange,提问作者ACDev
相关产品推荐
相关产品推荐

