javascript - 通过来自 url 的令牌 React Admin 登录
问题描述
我正在尝试实现 SSO react-admin login
大多数 react-admin 示例都是简单的用户名/密码登录并获取令牌然后存储在存储中。但对我来说,token 将从 Auth Provider 服务器返回并重定向到http://example.com/#/login?token=TOKEN,并让 react-admin 解析 URL,并在 localStorage 中设置令牌。然后更新 React 管理存储以将用户标记为“已登录”
但对我来说,在验证来自 app main js 的令牌后,我未能模拟作为钩子登录,你能帮我怎么做吗
解决方案
像下面这样的解决方法对我有用,但这是一个非常肮脏的解决方案:
const url = window.location;
(() => {
if (localStorage.getItem("access_token") === "null" || localStorage.getItem("access_token") === "undefined") {
localStorage.removeItem("access_token");
}
})();
const access_token = () => {
if (localStorage.getItem("access_token")) {
return localStorage.getItem("access_token")
} else if (new URLSearchParams(url.search).get("access_token")) {
return new URLSearchParams(url.search).get("access_token")
}
}
localStorage.setItem("access_token", access_token());
export const authProvider = {
login: () => {
return Promise.resolve();
},
logout: () => {
localStorage.removeItem("access_token");
return Promise.resolve();
},
checkError: (status) => {
if (status.response.status === 401 || status.response.status === 403) {
localStorage.removeItem("access_token");
return Promise.reject();
}
return Promise.resolve();
},
checkAuth: () => {
return localStorage.getItem("access_token") ? Promise.resolve() : Promise.reject();
},
getPermissions: () => Promise.resolve(),
};
根本没有登录方法调用,只需将令牌直接设置到 localStorage 并使用 checkAuth 方法检查。也许,有人会给出更好的解决方案。
推荐阅读
- swift - 为什么 UITextView 不显示文字?
- angular - 使用 tabler angular:请通过“文件”或“包含”属性确保它在您的 tsconfig 中
- perl - Mojo::UserAgent 和 local_address 方法
- docker - 如何使用 dockerfile RUN --mount 挂载本地文件夹?
- c# - 调用包含反射时的异常
- matlab - 使用颜色条注释相关矩阵图的片段
- mysql - 任何人都可以告诉我为什么我的查询需要永远运行吗?
- php - PHP REST api:关于发布图像文件的人的建议
- python - 尝试打开虚拟环境时出错
- c# - REST 客户端不等待 REST API 服务