繁体   English   中英

在具有Node / Express后端的ReactJS应用程序中,会话期满后是否处理重定向?

[英]Handle redirects after session expiry in ReactJS application with Node/Express backend?

我在redis-store使用express-session,它创建了会话详细信息的httpOnly cookie。 我应该如何处理cookie到期和用户清除的cookie,以便可以将用户重定向回登录页面?

以下是方案:

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

因此,自然的响应是用户重新加载站点时,React应该注销他。 我应该如何处理呢?

我假设您的Nodejs + Express代码是JSON API,而不是提供服务器端呈现的网页。 在这种情况下,如果使用过期/不存在的会话cookie发出请求,则只应返回错误。 您可以将其捆绑到一块中间件中,因此您只需编写一次即可,而无需多次编写。 例如,此中间件可能返回指示“无效会话”的错误。

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

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

示例方案:

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

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

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

@Elliot这就是我在Express中为React服务的方式。 当我点击reload时,此调用被调用并进行React加载。 在API调用中,我们有一个错误方法。 但是,在这种情况下,没有错误方法,因此如何注销用户?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM