reactjs - 调用 HandleRedirectPromise 后 MSAL 已验证/未验证的模板组件不起作用
问题描述
我有一个 React 应用程序,我在其中使用 msal 库通过 Azure B2C 进行身份验证,并且我正在使用登录重定向流。直到最近,我才知道登录后令牌存储在会话中,并且我根据默认的复杂密钥将其取出。我最近了解到,您可以调用 msalInstance.HandleRedirectPromise().then(...) 在重定向后实际取回令牌并自行存储。但是,在添加调用后,Authenticated 和 Unathenticated Template 组件都停止工作 - 任何一个都没有呈现任何内容。
我知道是这种情况,因为我减少了一个简单的案例:
<AuthenticatedTemplate>AA</AuthenticatedTemplate>
<UnauthenticatedTemplate>BB</UnauthenticatedTemplate>
我在每次渲染时在我的 App.tsx 文件中调用 HandleRedirectPromise:
this.props.instance
.handleRedirectPromise()
.then((tokenResponse) => {
if (tokenResponse !== null) {
const idToken = tokenResponse.idToken;
sessionStorage.setItem("idToken", idToken);
}
})
.catch((error) => {
console.error(error);
});
当我删除 handleRedirectPromise 调用时,会呈现正确的模板。我是否需要手动设置 ActiveAccount 才能让模板再次工作?
解决方案
什么都没有返回,因为 handleRedirection 正在返回一个空令牌响应。
这是microsoft-authentication-library-for-js中的一个已知错误。您需要将 /home 路由添加到您的 AAD 应用注册。在 b2c 配置中注释您的 redirectUri 并将 navigationToLoginRequestUrl 设置为 true。
推荐阅读
- java - 这个 KOTLIN 代码的 java 等价物是什么?
- go - 如何使用软删除设置关联 deletedAt 字段?
- python - 使用 Python 将 Json 转换为数据框
- assembly - 如何使用 DOSBox 中的汇编程序消除字符串中的空格和标点符号?
- javascript - 如何检查快速验证器中的字段是否唯一?
- python - 如何防止重复信息进入mysql数据库?
- c++ - 未找到 OpenEXR 头文件
- tcl - TCL 尾文件名
- c++ - 如何使用模板化的 constexpr 成员函数初始化 constexpr std::array?
- python - wandb - RuntimeError: CUDA 内存不足