2017-04-10 82 views
2

我有一個關於React中會話cookie的問題。在React中使用會話Cookie

目前,這是我如何驗證用戶:

export function loginUser({ email, password }) { 
    return function(dispatch) { 
     axios.post(`${API_URL}/users/authenticate`, { email, password }, { withCredentials: true }) 
      .then((response) => { 
       if (response.data.result_status == "success") { 
        localStorage.setItem("token", JSON.stringify(response.data.user)) 
         dispatch({ type: AUTHENTICATE_USER }); 
         browserHistory.push("/home"); 
        }) 
       } 
      }) 
      .catch(() => { 
       dispatch(authError('Incorrect Login Info')); 
      }); 
    } 
} 

我送emailpassword到URL。如果response.data.result_status == "success",那麼我將用戶信息(如他們的名字和電子郵件)設置爲localStorage標記,我打電話給AUTHENTICATE_USER,它將另一個localStorage項設置爲true。

由於我使用的是localStorage,所以當我重新加載時數據仍然存在。只要認證的localStorage沒有設置爲空,我就留在系統上。

但是,現在我們希望在系統中保持長時間,因爲cookie的會話沒有過期。目前,我基於我設置爲本地存儲的令牌而不是cookie保留在系統上。

後端沒有使用JWT,只是一個cookie。有沒有辦法讓我檢查cookie是否仍在與axios進行會話?

+0

你不能爲您在XHR響應的cookie。您可以在請求發出之前和之後比較cookie。 – elmeister

+0

@elmeister感謝您的回覆。如何「檢查」cookies?我需要將它設置爲localStorage中的令牌嗎? – lost9123193

+1

我認爲你最好從https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie開始 – elmeister

回答

1

唯一知道來自cookie的會話仍然處於活動狀態的是API,因此您需要檢查來自Cookie的會話是否仍處於活動狀態。我假設你在沒有登錄後會收到401 Unauthenticated,所以你可以檢查每個請求的響應狀態碼,並在會話過期時刪除localStorage項目。

我建議你使用響應interceptor from Axios檢查狀態代碼:

axios.interceptors.response.use(function (response) { 
    // Do something with response data 
    return response; 
    }, function (error) { 
    // Do something with response error 
    if (error.status === 401) { 
     // DELETE YOUR AUTHENTICATE_USER item from localStorage 
    } 
    return Promise.reject(error); 
}); 
+0

啊我明白了。因此,如果axios GET廣告POSTS永遠不會返回401錯誤,這是否意味着cookie仍處於會話中? – lost9123193

+0

這是正確的。 –

+0

但是,如果用戶用用戶名和電子郵件手動填充localStorage會如何驗證? –