Express 如何授权web应用程序和管理会话

Express 如何授权web应用程序和管理会话,express,session,redux,web-applications,authorization,Express,Session,Redux,Web Applications,Authorization,我正在构建一个单页react应用程序,使用redux作为状态管理器,使用express node js作为后端服务器,但我不知道在应用程序中授权用户的最佳方式是什么 如果是php或express js网站,我可以使用PHPSESSION或express session来管理用户会话数据,但现在单页web应用程序与后端分离,我无法像以前那样管理会话 我的想法是为每个新的web请求创建一个会话id,然后将其保存到本地存储中供客户端使用,然后在服务器中将所有需要的信息存储到数据库中,当应用程序有API

我正在构建一个单页react应用程序,使用redux作为状态管理器,使用express node js作为后端服务器,但我不知道在应用程序中授权用户的最佳方式是什么

如果是php或express js网站,我可以使用PHPSESSION或express session来管理用户会话数据,但现在单页web应用程序与后端分离,我无法像以前那样管理会话

我的想法是为每个新的web请求创建一个会话id,然后将其保存到本地存储中供客户端使用,然后在服务器中将所有需要的信息存储到数据库中,当应用程序有API调用时,将该id发送到请求头中。然后,我们可以使用实现的会话检查授权

但我认为如果有一种更简单的方法来处理这个问题,就不需要自己实现会话


(我不想使用firebase或okta之类的第三方服务,也不想将所有会话数据保存在JWT之类的客户端中。)

最后,我实现了一个自定义会话管理器(),以便客户端向服务器发送请求并获取令牌id,然后使用它访问服务器中的会话

每个会话都应该可以通过标识令牌(这里称为sid)访问,以便应用程序可以保存该令牌以访问和使用该会话。应用程序的服务器端状态可用于保存客户端身份验证状态或任何有关要在服务器端使用的客户端的临时数据,因此在应用程序中,您将保存该标识令牌,然后在每个请求中以http标头发送该标识令牌,然后服务器将知道您是谁以及您以前做过什么基于数据库中保存的会话数据(该id的服务器端状态)在应用程序上,这样它就可以根据客户端标识及其在服务器上的状态为您提供所需的信息。它被创建为用作express中间件,mongodb用作数据存储

当您的应用程序没有会话并且第一次加载时,它会向服务器发送一个请求,以便在服务器收到请求时为自己获取一个标识,服务器分析该请求,它会发现不存在任何会话id(sid)因此,它将为此请求创建一个新的请求,并将其添加到响应头部分,这样当服务器决定发送响应时,它也将发送创建的会话信息。客户端应保存该信息,以便将该会话用于其其他请求。它可以在请求头部分发送该id以显示其标识。当会话在阈值时间内未使用时,会话也可能会过期。因此,当服务器出现错误或会话过期时,它的行为就像没有任何会话的请求一样,因此它将为该请求创建一个会话,并发送其信息,就像我们前面解释的那样


你可以看到它;好。。。由于您使用的是Redux,并且用户会话看起来像一个全局状态,因此可以将令牌存储在存储上。这还不够吗?还有,为什么要为每个请求创建一个新的会话id?我认为它可能有很多异步问题。您每次只能执行一个请求@Macabeus是的,我可以存储它,但我的主要问题是关于后端部分。。我应该实现自己的会话管理器吗?@amimmsh请更新问题的标签。我认为问题是关于前端部分(请您标记
redux
reactjs
…)。另外,最好使用第三方解决方案,因为它太容易出错并打开安全漏洞。