【问题标题】:“Cannot read property 'id' of undefined” error [closed]“无法读取未定义的属性 'id'”错误 [关闭]
【发布时间】:2020-09-01 08:31:41
【问题描述】:
export const isAuthenticated = () =>

 { if (typeof window == 'undefined') {

 return false; }

 if (localStorage.getItem('jwt')) {

 return JSON.parse(localStorage.getItem('jwt')); } 

else { return false; } 
};

我在前端使用 react js,后端使用 node js。这个错误是关于后端的吗?

【问题讨论】:

  • 要回答您的问题,有必要编写一些代码来重现您的上下文和工作以及您的问题。
  • 1) 请将错误和代码作为文本发布,而不是场外屏幕截图。它使人们更容易提供帮助。 2) user 未定义,但使用提供的有限代码无法判断错误在哪里。 isAuthenticated 听起来应该返回一个布尔值,但我不能肯定。
  • 您能否将isAuthenticated() 函数的文本形式发布出来?
  • 看起来 isAuthenticated 没有返回 user 对象

标签: node.js reactjs


【解决方案1】:

这是因为在user对象中找不到_id。所以你可以这样做来确保已经有user对象

<Link
      to={`users/${isAuthenticated().user && isAuthenticated().user._id}`}
    >

【讨论】:

  • 我可以在控制台上看到 jwt 令牌,所以我认为有一个用户
【解决方案2】:

您为什么要调用 isAuthenticated().user._id,从我在您的代码中可以看到,isAuthenticated() 正在返回令牌而不是用户,并且 jwt 令牌不包含 _id 属性。

我认为您正在尝试或应该做的是获取令牌,然后对其进行解码并获取有效负载,您的包含 _id 属性的用户对象可能在那里找到。

您可以使用 jwt-decode 包对令牌进行解码

export const isAuthenticated = () =>

 { if (typeof window == 'undefined') {

 return false; }

 if (localStorage.getItem('jwt')) {

 const token = JSON.parse(localStorage.getItem('jwt')); 
 
   const decoded: any = decode(token);
   return decoded.user._id
 }


else { return false; } 
};

【讨论】:

  • 你认为这是我的应用程序太慢的原因还是只是关于 mongodb 地图集
  • 我建议您在答案中包含一个代码 sn-p。
猜你喜欢
  • 1970-01-01
  • 2021-11-07
  • 2023-03-28
  • 2020-10-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2019-11-18
相关资源
最近更新 更多