如何知道给定用户是否已使用 MSAL 登录?

How to know if a given user is already logged in with MSAL?

使用 msal.js 库(Microsoft 身份验证库),这是知道给定用户是否已登录的方法?如果用户的凭据已保存在浏览器的存储中,我的目的是避免显示登录弹出窗口

我目前的做法:

function isUserLoggedIn(username) {
 const agent = msal.UserAgentApplication(...);
 const user = agent.getUser();
 return user != null && user.displayableId === username);
}

但我不确定是否必须检查用户凭据是否为 ​​outdated/expired。正确的方法是什么?

使用 MSAL 代理实例,您可以获取用户信息,因为它已被缓存。获取信息(例如 userId)并不意味着用户的凭据仍然有效(已登录)。 要 100% 确定用户已登录,请请求令牌

const promise = agent.acquireTokenSilent(...)

如果用户未登录,promise 将被拒绝,错误代码为 user_login_error 另一方面,如果用户仍处于登录状态,则承诺将得到解决

来自 MSAL samples,他们是这样检查的:

let isLoggedIn = this.authService.instance.getAllAccounts().length > 0;