簡體   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