0

少し奇妙なもの。私のAngularアプリには、refreshUserすべての画面データを表示する前に、ログインしている可能性のあるユーザーをロードする方法があります。そのために、次のngOnInit方法があります。

async ngOnInit() {
    await this.authService.refreshUser();
}

refreshUser メソッドには次のコードがあります。

public refreshUser(): Promise<void> {
        return this.manager.signinSilent()
                            .then(user => {
                                this.user = user;
                            })
                            .catch(e => {
                                console.log('User not logged in', e);
                            });
    }

真新しいナビゲーションでは、これはスムーズに機能し、エラーが発生します:

User not logged in ErrorResponse: login_required
    at new e (main.2a53201b6340bff6258a.js:1)
    at t._processSigninParams (main.2a53201b6340bff6258a.js:1)
    at t.validateSigninResponse (main.2a53201b6340bff6258a.js:1)
    at main.2a53201b6340bff6258a.js:1
    at e.invoke (polyfills.3efb6da5a4e032fb1cf9.js:1)
    at Object.onInvoke (main.2a53201b6340bff6258a.js:1)
    at e.invoke (polyfills.3efb6da5a4e032fb1cf9.js:1)
    at t.run (polyfills.3efb6da5a4e032fb1cf9.js:1)
    at polyfills.3efb6da5a4e032fb1cf9.js:1
    at e.invokeTask (polyfills.3efb6da5a4e032fb1cf9.js:1)

(ユーザーはログインしたことがありません)。

奇妙なシナリオは、ログインしているユーザーがいる場合、Web ブラウザーを閉じて再度開くと、画面が約 10 秒間ハングした後、別のエラーが発生することです。

main.2a53201b6340bff6258a.js:1 User not logged in Error: Frame window timed out
   at t._error (main.2a53201b6340bff6258a.js:1)
   at t._timeout (main.2a53201b6340bff6258a.js:1)
   at e.invokeTask (polyfills.3efb6da5a4e032fb1cf9.js:1)
   at Object.onInvokeTask (main.2a53201b6340bff6258a.js:1)
   at e.invokeTask (polyfills.3efb6da5a4e032fb1cf9.js:1)
   at t.runTask (polyfills.3efb6da5a4e032fb1cf9.js:1)
   at t.invokeTask (polyfills.3efb6da5a4e032fb1cf9.js:1)
   at invoke (polyfills.3efb6da5a4e032fb1cf9.js:1)

しかし、画面がロードされて「ログイン」をクリックすると (ユーザーがログインしていないため)、コンポーネントをロードする前に「クラシック」AuthGuard がトリガーされるため、標準を実行しますstartAuthentication()

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
        if (this.authService.isLoggedIn()) {
            return true;
        }
        this.authService.startAuthentication();
        return false;
    }

これにより、ユーザーはすばやくログインします。私の質問は、ユーザーのサインインに関して、その関数とsigningSilent関数の違いは何ですか? ただし、少なくともタイミングとユーザーエクスペリエンスの点では、動作は期待されていません。「可能であればユーザーをログインできるが、ログイン画面を表示しない」ようにしたい。それは理にかなっていますか?

ありがとう!

4

0 に答える 0