使用节点/快速后端在 ReactJS 应用程序中处理会话到期后的重定向?



我正在使用带有redis-store的快速会话,它创建了一个会话详细信息的httpOnlycookie。我应该如何处理 Cookie 过期和 Cookie 被用户清除,以便我可以将用户重定向回登录页面?

以下是方案:

  1. Cookie_session由用户清除。
  2. Cookie_session已过期。

因此,自然的反应是当用户重新加载网站时,React 应该将他注销。我应该如何处理这个问题?

我假设你的Nodejs + Express代码是一个JSON API,而不是提供服务器端渲染的网页。如果是这种情况,您应该简单地返回错误,如果请求是使用过期/不存在的会话cookie发出的。你可以把它捆绑到一个中间件中,这样你只需要写一次而不是多次。例如,此中间件可能会返回指示"无效会话"的错误。

在反应方面,如果 API 返回了您为错误/不存在的会话 cookie 创建的特定错误,则由您的反应代码决定该怎么做。您可以选择将用户发送到一个页面,告诉他们他们已注销,或者您可能希望将用户直接发送到指示他们必须重新进行身份验证的登录提示。

如果_sessioncookie 过期,浏览器将为您清除它。因此,在 API 端,您需要担心的是未提供 cookie,或者服务器端代码以某种方式使会话无效。

示例方案:

  • 场景:会话 Cookie 未随请求一起传递(要么是过期、用户清除了 Cookie,要么是先前的请求告诉浏览器删除 Cookie(。结果:拒绝请求并出现错误,在前端使用该错误将用户重定向到登录屏幕,并显示一条消息"您必须首先登录"。
  • 场景:会话已在服务器端终止,这意味着会话 cookie 中的令牌与数据库中的有效会话(redis、mysql 等(不对应。结果:返回与上述场景中相同的错误,将发生相同的结果,并要求用户再次登录。

如您所见,在任何一种情况下,返回相同的错误都是合适的,前端将解释此错误并决定如何让用户重新进行身份验证(通常通过将用户重定向到登录屏幕(。

app.get('*', function (request, response)  { 
response.sendFile(path.resolve(__dirname, 'public', 'index.html')); 
});

@Elliot这就是我用来在 Express 中提供 React 的方法。当我点击重新加载时,此调用被调用并加载 React 。在 API 调用中,我们有一个错误方法。但是在这种情况下没有错误方法,那么我如何注销用户?

最新更新