我正在使用building journey来学习web开发。我正在使用nodejs,reactjs,mongodb,axios和expressjs。目前,我正在本地存储基本的用户信息,如用户名,id,角色,电子邮件。我可以继续存储其他内容。然而,在这条线上,我觉得在本地存储中存储角色可能会有问题,因为任何人都可以编辑他们的本地存储。这意味着,用户可以轻松地编辑其本地存储,并将其角色更改为管理员,以访问管理员有权访问的内容。
我决定访问一些已知的网站,如Upwork等,我检查了我的本地存储,我注意到他们没有存储信息,如用户名,电子邮件,角色等。作为一个新的人在这个领域,你认为在哪里是最好的存储信息,如上述我提到的,特别是数据可以授予访问和更改任何用户的访问权限?我不认为本地存储是最好的。此外,在检查浏览器开发工具时,我注意到无论从后端响应传递的是什么,在Web开发工具的响应部分下也可以看到。2响应部分是否可以通过Javascript访问?3或者它已经被expressjs加密了?
3条答案
按热度按时间cyej8jka1#
这里有两个概念需要理解:认证和授权。
身份验证是服务器验证用户是否说出自己身份的过程。最常见的身份验证示例是用户名和密码。
授权是服务器验证用户是否可以执行他们想要执行的操作的过程。用户通过身份验证后,服务器通常会在数据库中查找该用户,并查看该用户是否具有执行此操作的权限(在您的示例中,曾经的权限可能是admin)。
对于您的示例应用程序,您可能会做一些简单的事情,如将用户名、密码的哈希值和用户角色存储在数据库的表中。这可能对您的学习来说已经足够了。当用户尝试访问某个内容时,在表中查找角色,如果他们没有权限,则返回403 Forbidden
但您只是触及了主题的表面。例如,您说过应用程序不在客户端存储角色,但有趣的是,如果您使用Json Web Tokens之类的东西,则此信息将位于客户端。在此流程中,您对服务进行身份验证,您将获得一个包含您的角色的令牌(在您的示例中为admin)* 和签名 *。签名用于验证令牌是否由服务发出,这意味着它所包含的角色是可靠的,因此当应用程序向服务发出请求时,服务只需要验证签名。
9wbgstp72#
永远不要在本地存储器上存储重要信息。你的直觉是正确的,它可能被改变,或者它可能被其他人访问。即使你存储了一些数据(比如jwt令牌),也永远不要信任你的前端,也不要为了数据检索而向后端服务器验证它。
在您的情况下,您可以使用session storage或cache storage,具体取决于存储所需数据的方式
rm5edbpk3#
我曾经站在你的立场上,想弄清楚在使用与你相同的技术堆栈时应该使用什么。现在让我告诉你我使用什么-
1.决定我想要什么(如果是一个需要快速构建的小应用程序,并具有我使用会话的所有功能(nodejs提供了一个称为express-sessions的优秀库),如果我想要一个详细的快速应用程序,我使用JWT。
1.当你想存储用户设置的东西音量、亮模式暗模式时,可以使用简单的本地数据存储。
1.如果您在前端接收数据并希望在那里使用它,您可以使用状态管理框架,如zustand,redux,或任何其他.关于问题的进一步细节-〉您可以修改您存储在会话中的内容,如用户名,电子邮件ID,以及所有这些,并且当需要更多数据时,您可以在用户验证后从数据库请求.如果您有更具体的问题要问,请随时向我开火,我会尽我所能。如果它能给你一些关于主题的见解,请投赞成票。