[問題] 如何擷取oidc-client UserManager 丟出來的"User Not Found In Storage"

我們目前遇到一個Bug 是,如果使用者登入我們的網站後,開兩個視窗,此時兩個視窗都是登入網站的狀態,之後在其中一個視窗登出,另外一個視窗的Token會在五分鐘後過期。

我們現在是用Angular + IdentityServer + Micro Service( Serverless )

正常在Token過期後,理論上我們的Angular App,就會用這個過期的Token去Call 後端的 API, 當然後端因為Token過期就會丟出401Error 然而我們在Debug的時候,卻發現我們的Angular App Catch到的Error, Error Status 0, 似乎是哪邊有問題,有可能是我們用TokenInterceptor的問題,目前我們是研究不出來到底為什麼。

所以想說換個方法讓我們的Web app知道我們在另一個視窗登出,因為只要一登出,oidc-client 的UserManager會立刻通知另一個視窗說使用者已經登出,並且在developer tool可以看到 user not found in storage
但我們不知道這個oidc-client到底是怎麼運作的,是因為他持續一直load user? 但我們也研究不出來到底這個事怎麼運作的…

想請問版上的大大有人用過Angular + oidc-client 嗎? 或者用過TokenInterceptor? 感謝~~


你有看過 F12 的 Network 的狀態嗎? 怎麼能確定 status 0 是前端程式造成的呢?

Network 裡面,要求的resource回應的是401,在Console裡面也可以看到後端回應的401Error,但還出現了Uncaught Error(status 0, unknown url)
另外我Google了status0 一般好像是XMLHttpRequest 丟出來的,request初始化失敗,但我們不熟XMLHttpRequest也不清楚Angular在這塊是怎麼實作的…Q_Q

因為你是實作一個 HttpIncetpor,也不太確定為什麼你的 status 會是 0,以下有一篇文章可以閱讀一下

2個讚

如果換個簡單一點的做法呢?

登入後將 token 存在 LocalStorage 裡,要用時從 LocalStorage 裡取出。
登出後則從 LocalStorage 刪除此 token,此時另外一個視窗如果要用時發現找不到 token 的話,表示已登出。