問題タブ [angular-oauth2-oidc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular - initialNavigation が有効で CanActivateChild が false を返す Angular Universal が応答しない
すべてのルートが保護され、RouterinitialNavigation
プロパティが に設定されている SSR を使用する Angular アプリケーションがありenabled
ます。コード フロー + PKCE でangular-oauth2-oidcパッケージを使用しています。すべてのルートは遅延ロードされCanActivateChild
、ユーザーが認証されているかどうかをチェックするガードがあります。
ブラウザーでは、認証されているかどうかがCanActivateChild
チェックされ、認証されていない場合は Azure AD B2C にリダイレクトされて認証が実行されます。これは、SSR なしで実行している場合は正常に機能しています。
サーバーにいるとき、CanActivateChild
認証されていない場合は、戻ることでナビゲーションをキャンセルするだけfalse
ですが、リダイレクトはありません。アイデアは、認証されておらず、ブラウザーに認証を処理させるため、アクティブ化されたルートなしで、レンダリング/ブートストラップされたルート コンポーネントだけを返すことです。angular-oauth2-oidcはブラウザー プラットフォーム用であるため、それはブラウザーに任せOAuthService
ます。一部のブラウザー API に依存するため、一部の機能はサーバー上では機能しません。OAuthStorage
各プラットフォームの実装があるので、取得できます各プラットフォームのトークン。このセットアップでは、Express.js サーバーは応答しません。これは、アプリケーションのブートストラップがナビゲーションの完了を待っているためだと思われますinitialNavigation
。enabled
. ある意味でのキャンセルはナビゲーションの完了でもあるので、これでうまくいくと期待していました。
これを回避するには、ページがちらつくため無効initialNavigation
にするのは良くありません (つまり、いいえ)、ナビゲーションを完了するためだけに空のコンポーネントにリダイレクトする、手動でサーバーから Azure AD B2C 承認エンドポイントなどへ。
誰かがこれに遭遇し、より良い解決策を持っていますか? 何か不足していますか、それとも設定が間違っていますか?
いくつかのスニペットを追加して編集します。
認証ガード:
は、トークンが Cookie にある場合にのみサーバーで送信されるauthService.isAuthenticated$
fromObservable
です。トークンが保存されていない場合BehaviorSubject
など、サーバーで正常に返されることを確認しました。true の場合、ナビゲーションが完了するため、すべてが正常に機能します。false
true
authService.login
ブラウザのメソッドがメソッドを呼び出しますOAuthService.initCodeFlow
。サーバーでは空のメソッドです。