2014-02-23 44 views
1

我有一個angular.js單頁面應用程序,它針對RESTful API(Servicestack)進行身份驗證。這一切工作正常。當返回來自認證api的響應時,用戶名將存儲在Angular服務中,並且isAuthenticated標誌將設置爲true。瀏覽器刷新 - 丟失的服務堆認證會話數據

任何針對[驗證]屬性的Web服務的請求都會返回數據。

我的問題是,當我刷新瀏覽器時,我的JavaScript角對象被刷新,用戶身份驗證的事實被遺忘。然而,當我打電話給[驗證]歸屬服務,他們工作正常,因爲會話仍然是活...

道歉的相當noob問題,但瀏覽器如何傳遞會話到Web服務時,JavaScript對象已破壞和重建?我如何在刷新時獲取相同的會話,並使用用戶名等設置我的Angular服務?

+0

有什麼我可以添加,使這個問題更容易回答?我很高興展示代碼,但考慮到這個問題並不認爲它特別相關。 – Drammy

回答

3

默認情況下,ServiceStack身份驗證使用Cookie來存儲會話令牌。這意味着當您首次登錄時,您的Angular應用程序將收到Cookie。它將通過此​​傳遞給後續請求,並且在會話在服務器上仍然有效時它們將成功。

問題在於當你刷新頁面時,Angular將失去對象狀態,即告訴它你有一個活動會話。所以你必須將這些知識恢復到Angular。有兩種方法來解決這個:

  1. 檢查的ss-id cookie時,你的應用程序啓動和假設你有一個有效的會話。換句話說,如此恢復到登錄狀態,直到您從服務器收到401錯誤。這是最快的方法,如果有人刷新頁面,不需要額外的開銷來檢查會話。

  2. 檢查ss-id cookie並進行測試驗證請求以檢查會話是否仍然有效。

如果您需要恢復的其他信息,如登錄的用戶名等的電流,那麼你就需要存儲在cookie /本地存儲到它刷新恢復,或與方法2去,從服務器上取回它。

您可以使用$cookies provider來管理會話cookie。

+0

所以這意味着我必須通過腳本使ss-id可訪問 - 當我查看cookie時它是HttpOnly ..? – Drammy