AUTH_LOGIN 获取完成后如何调用 AUTH_CHECK?

2023-12-26

我正在调用 HTTP API 以使用返回承诺的 axios 登录 AUTH_LOGIN。在 API 调用完成之前,AUTH_CHECK 被调用并失败。是否可以仅在 http 调用完成后触发 AUTH_CHECK?请在下面找到我的 authprovider

    import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from 'react-admin'
import { login, logout, isLoggedIn, isLoginComplete, isLoginStarted } from '../services/auth'

export default (type, params) => {
    // called when the user attempts to log in
    if (type === AUTH_LOGIN) {
        const { username, password } = params
        login(username, password)
        return Promise.resolve()
    }
    // called when the user clicks on the logout button
    if (type === AUTH_LOGOUT) {
        logout()
        return Promise.resolve()
    }
    // called when the API returns an error
    if (type === AUTH_ERROR) {
        const { status } = params
        if (status === 401 || status === 403) {
            logout()
            return Promise.reject()
        }
        return Promise.resolve()
    }
    // called when the user navigates to a new location
    if (type === AUTH_CHECK) {
        // return isLoggedIn() ? Promise.resolve() : Promise.reject()
        return isLoggedIn() ? Promise.resolve() : Promise.reject()
    }
    return Promise.reject('Unknown method')
}

登录方法:

import axios from 'axios'

export function login(username, password) {
    logout()
    startLogin()
    axios({
            method: 'post',
            url: '/auth/login',
            auth: {
                username: username,
                password: password
            },
        })
        .then(function (response) {
            let token = response.headers['jwt-token']
            setToken(token)
        })
        .catch(function (error) {
            logout()
        });
}

export function logout() {
    localStorage.removeItem('token')
}

export function isLoggedIn() {
    return localStorage.getItem('token') ? true:false
}

export function getToken() {
    localStorage.getItem('token')
}

export function setToken(token) {
    localStorage.setItem('token', token)
}

我能够通过使用 async/await 来修复它。

授权提供者:

import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_ERROR, AUTH_CHECK } from 'react-admin'
import { login, logout, isLoggedIn, isLoginComplete, isLoginStarted } from '../services/auth'

export default async (type, params) => {
    switch(type) {
        case AUTH_LOGIN: 
            const { username, password } = params
            await login(username, password)
            return Promise.resolve()
        break
        case AUTH_LOGOUT:
            logout()
            return Promise.resolve()
        break
        case AUTH_ERROR:
            const { status } = params
            if (status === 401 || status === 403) {
                logout()
                return Promise.reject()
            }
            return Promise.resolve()
        break
        case AUTH_CHECK:
            return isLoggedIn() ? Promise.resolve() : Promise.reject()
        break
    }
    return Promise.reject('Unknown method')
}

登录方法: 从 'axios' 导入 axios

export async function login(username, password) {
    logout()
    const response = await axios({
            method: 'get',
            url: '/auth/login',
            auth: {
                username: username,
                password: password
            },
        })
    const token = await response.headers['jwt-token']
    setToken(token)
}

export function logout() {
    localStorage.removeItem('token')
}

export function isLoggedIn() {
    return localStorage.getItem('token') ? true:false
}

export function getToken() {
    localStorage.getItem('token')
}

export function setToken(token) {
    localStorage.setItem('token', token)
}

export function getResourcesForUser() {

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AUTH_LOGIN 获取完成后如何调用 AUTH_CHECK? 的相关文章

随机推荐

  • str_get_html 未加载有效的 html 字符串

    我使用curl 收到一个html 字符串 curl setopt ch CURLOPT RETURNTRANSFER true html string curl exec ch When I echo我看到了一个完美的 html 来满足我的
  • 设置新文本时更改 UITextField 中的光标

    我发现一件事 如果我设置 yes 来运行 textField shouldChangeCharactersInRange replacementString 光标停留在我输入的同一位置 例如 光标 gt Empty type a a gt
  • Java 维基文本解析器 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 对于一个具有易于使用且可配置的 API 的漂亮解析器有什么想法吗 我希望向其提供数据 例如 选择我想要
  • iPad 屏幕不支持自动布局

    I have created view using autolayout it works fine in all iPhone devices but it left some blank space at left right top
  • xcode 6.1 iOS 8.1 NSLocale displayNameForKey NSLocaleIdentifier 返回 nil

    NSString countryNameByCode NSString countryCode NSString identifier NSLocale localeIdentifierFromComponents NSLocaleCoun
  • 从 1 个单词的字符串中提取数字

    在我试图制作的这个程序中 我有一个表达式 例如 I 23mm 或 H 4V 并且我试图从中提取 23 或 4 以便我可以把它变成一个整数 我一直遇到的问题是 由于我试图取出数字的表达式是 1 个单词 所以我不能使用 split 或任何东西
  • C++:Linux 中的计时(使用 Clock())不同步(由于 OpenMP?)

    在程序的顶部和结尾 我使用clock 来计算程序需要多长时间才能完成 不幸的是 它似乎只花费了报告时间的一半 我用 time 命令仔细检查了这一点 我的程序报告 45 86秒完成 时间命令报告 真实0米22 837秒 用户 0m45 735
  • 在 Python TCP 流中使用分隔符

    我正在开发一个使用 TCP 协议从天线收集 ADS B 消息的程序 由于我是Python新手 我使用以下脚本来建立连接 问题是我同时收到多条消息 因为 TCP 是面向流的 例如 我想使用 n 分隔符分隔每条消息 每条消息开头有 结尾有 长度
  • 获取 Woocommerce 中当天的订单总购买金额

    对于 Woocommerce 我在下面编写了代码 试图获取今天的订单总购买金额 function order total woo fahad Get orders from people named John that were paid
  • 如何更新xslt中的变量值?

    我已在 xsl 文件中声明了一个变量 现在我想用新值更新旧值 例如
  • 使用 WiX 打包包含许多文件的安装程序

    我有一个包含数百个文件的 WiX 3 项目 我似乎不知道如何使用通配符将它们全部包含在内 我已经尝试过这个 heat exe dir Build gg ke template fragment out Files wxs 这会生成一个片段
  • 当视图被推送时,UISearchController 不会被关闭

    我知道这是一篇很长的文章 但这只是我保证的一个问题 设置 我在 UISearchController 中遇到了一些非常奇怪的行为 让我描述一下层次结构 然后我将逐步解释视频中发生的情况 您看到的第一个视图是常规 ViewController
  • 这个 typedef 是什么意思?

    我是 C 新手 这个 typedef 对我来说看起来有点奇怪 有人可以解释它的作用吗 typedef void alpm cb log alpm loglevel t const char va list 它位于头文件中 您可以使用 cde
  • 当 PythonOperator 出现错误“Negsignal.SIGKILL”时,Airflow DAG 失败

    我在 Cloud Composer v1 16 16 上运行 Airflowv1 10 15 我的 DAG 看起来像这样 from datetime import datetime timedelta imports from airflo
  • 在多线程代码中出于性能原因应避免什么?

    我目前正在审查 重构一个多线程应用程序 该应用程序应该是多线程的 以便能够使用所有可用的内核并理论上提供更好 卓越的性能 卓越是更好的商业术语 P 编写多线程应用程序时应该注意哪些事项 我的意思是那些会极大地影响性能的事情 甚至可能达到这样
  • 更改用于 TF 命令行的登录帐户

    当使用TFS 2012的命令行版本时 我们调用 TF exe get Path To Team Project Some Folder recursive 通过命令行提示符的调用 我的命令成功了 我没有为此通话输入任何用户名 密码 我想更改
  • 我正在运行哪个版本的 PostgreSQL?

    我在企业环境中 运行Debian Linux 并且没有自己安装它 我使用 Navicat 或 phpPgAdmin 访问数据库 如果有帮助的话 我也没有对运行数据库的服务器的外壳访问权限 从 PostgreSQL 运行此查询 SELECT
  • RxSwift:BehaviorRelay 代替变量使用

    我是 RxSwift 的新手 正在阅读有关主题的内容 我尝试过Variable主题 这又在控制台中发出警告 DEPRECATED Variable is planned for future deprecation Please consi
  • 有没有更简洁的方法来注册 Qt 自定义事件?

    我需要为 Qt 应用程序创建几个自定义事件类 现在 看起来我需要为每个事件类实现以下事件类型注册代码 class MyEvent public QEvent public MyEvent QEvent registeredType stat
  • AUTH_LOGIN 获取完成后如何调用 AUTH_CHECK?

    我正在调用 HTTP API 以使用返回承诺的 axios 登录 AUTH LOGIN 在 API 调用完成之前 AUTH CHECK 被调用并失败 是否可以仅在 http 调用完成后触发 AUTH CHECK 请在下面找到我的 authp