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

时间:2018-07-02 13:43:21

标签: node.js reactjs express session express-session

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

以下是场景:

  1. Cookie _session已由用户清除。
  2. Cookie _session即将到期。

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

2 个答案:

答案 0 :(得分:0)

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

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

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

示例方案:

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

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

答案 1 :(得分:0)

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

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

相关问题