oidc-client
ライブラリを使用してトークンの更新を実装することにほとんど成功していません。どんな助けや洞察も大歓迎です。
スタック:
- 反応する
- GraphQL (アポロ クライアント)
構造:
フォルダーにコールバック ファイルautomaticSilentRenew
を作成することから始めて、いくつかのアプローチを試しましたが、この両方のアプローチでエラーが発生したため、回避策に着手しました。static-renew.html
public/
No state in response
回避策:
次のことを行うコンポーネントでルーターをラップしています。
マウント時
oidc-client.getUser()
に次のリスナーを呼び出して追加します。oidcMgr.events.addAccessTokenExpiring(handleTokenExpiring)
window.addEventListener('message', this.handleSilentRenew)
イベントが最初に発生すると、
addAccessTokenExpiring
次の関数が呼び出されますoidcMgr.createSigninRequest({ redirect_uri: process.env.REACT_APP_SILENT_REDIRECT_URI })
。apollo-link-state
(上記の関数から) apollo-link-state に tokenURI がある場合、iFrame をレンダリングします。
コンポーネントがアンマウントされると、両方のリスナーが削除されます。
- コールバック URL がヒットすると、ソースとともにメッセージを投稿するコンポーネントがマウント
silent-renew
されるため、手順 1 でマウントされたリスナーはトークン URI を''
に設定してapollo-link-state
、iframe を終了し、getUser
再度呼び出します。
これはトークンを更新するために機能しますが、iFrame がアプリケーション全体をその内部にロードしてから終了し、アプリケーションが必要以上のリソースを消費しているようです。
このライブラリを使用して React アプリケーション内でトークンを更新する別のより簡単な方法はありますか? どんな助けや視点も大歓迎です。ありがとうございました!