0

我在我的角度项目中使用 oidc-client。如果用户对象不为空,我在 app.component.ts 中编写了以下代码以将用户重定向到主页。但是即使成功登录,用户对象也始终为空。我正在使用 microsoft azure 进行身份验证。

app.component.ts

async ngOnInit() {
    await this.authService.getUser().then(user => {
        console.log(user) // always returns null even after login
        if (user) {
            this.router.navigate(['/home']);
        }
    });
}

login() {
    this.authService.signinRedirect();
}

身份验证服务.ts

export class AuthenticationService {
    
    private userManager: UserManager;
    constructor(settings: Settings) {
        this.userManager = new UserManager(settings);
    }

    public signinRedirect() {
       this.userManager.signinRedirect();
    }

    public getUser() {
        return this.userManager.getUser();
    }
}

成功登录后,我在名为 oidc.user.xxxxxxx 的本地/会话存储中看不到任何 key:val 对。

此外,我还对一些示例内部应用程序进行了交叉检查。成功登录后,oidc api 将触发对令牌端点的调用。在我的情况下,这个端点没有被调用。

可能缺少什么?我究竟做错了什么?

4

1 回答 1

0

在 app.component.ts 中注册登录重定向回调解决了这个问题。

async ngOnInit() {
if (window.location.href.includes('code')) { // without this if condition I am getting an error saying no state in response. not sure if there is a better way.
     this.authService.signinRedirectCallback();
}

await this.authService.getUser().then(user => {
    console.log(user) // always returns null even after login
    if (user) {
        this.router.navigate(['/home']);
    }
});

}

于 2021-06-03T17:12:32.563 回答