使用MsalService的loginRedirect():ngrx效果中的void方法来确定登录成功吗?

问题描述 投票:1回答:1

我正在使用Azure AD登录到我的角度应用程序。使用MSAL,我可以使用MsalService的loginPopup()方法执行此操作。另外,我正在使用ngrx来管理我的状态。相关的代码摘录看起来像这样

/登录页面调用中的登录按钮

login(): void {
    this._store.dispatch(new Login());
}

哪个触发了此操作

export class Login implements Action {
    readonly type = AuthActionTypes.LOGIN;
}

自身会被一种效果所捕获,即成功接收到id_token会检查其签名的有效性(然后,该签名成功后将分派LoginSuccess操作)。否则,通过调度LoginFail操作将登录视为失败。

@Effect()
doLogin$: Observable<Action> = this._actions$.pipe(
    ofType<Login>(AuthActionTypes.LOGIN),
    switchMap(() => {
        return observableFrom(this._msal.loginPopup()).pipe(
            map(idToken => new CheckTokenValidity(idToken)),
            catchError(error => of(new LoginFail(error)))
        );
    })
);

这很好,但是我现在想用MsalService.loginPopup(): Promise<any>代替MsalService.loginRedirect(): void。但有一个问题,我希望我的ngrx效果链会中断,因为那样就不再有任何承诺,而只会返回空值。

我将如何处理修复这个?

欢呼声

angular ngrx msal ngrx-effects
1个回答
0
投票

这是一个较旧的问题,但我会给它一个答案,因为在搜索NGRX和Msal / Adal时仍会弹出。

更新您的效果以不发送任何动作,它会破坏链条。

@Effect({dispatch: false)
doLogin$: Observable<Action> = this._actions$.pipe(
    ofType<Login>(AuthActionTypes.LOGIN),
    tap(() => {
        // void function
    })
);
© www.soinside.com 2019 - 2024. All rights reserved.