首页 > 编程问答 >使用 Axios HTTP 客户端通过 GET 请求调用 FastAPI 后端时收到 422 错误响应

使用 Axios HTTP 客户端通过 GET 请求调用 FastAPI 后端时收到 422 错误响应

时间:2024-07-28 13:32:11浏览次数:9  
标签:javascript python axios vuejs3 fastapi

我正在尝试从我的 Vue3 客户端(使用 GET JavaScript HTTP 客户端)向 FastAPI 服务器发出 axios 请求,但我收到 422 unprocessable entity 错误响应。据我了解,这种错误消息与错误的输入有关。

这是 vue3 代码:

import { authToken } from "../main.js"

export default {
  ...
  mounted() {
    const response = axios.get('/checkIsLogged', authToken);
    console.log("authToken" + authToken)
    this.isLoggedIn = response
    console.log("isLoggedin", response)
    if (response) {
      this.title3 = "Mi perfil"
    } else {
      this.title1 = "Sign in"
    }
  },

其中“authToken”:

export const authToken = ""

export const setAuthToken = (token) => {
    authToken = token
}

另一方面,在 FastAPI 后端中,端点如下所示:

@empresa.get("/checkIsLogged", response_model=bool)
def is_token_expired(authToken: str):
    try:
        payload = jwt.decode(authToken, SECRET_KEY, algorithms=[ALGORITHM])
        expiration_timestamp = payload.get("exp")
        if expiration_timestamp is None:
            return True 
        expiration_datetime = datetime.fromtimestamp(expiration_timestamp)
        current_datetime = datetime.now()
        if current_datetime >= expiration_datetime:
            return True  
        return False 
    except JWTError:
        return False 

我做错了什么?

提前致谢。


该问题源于尚未在 GET 请求中正确传递 authToken 至 FastAPI 后端。应在 Axios GET 请求的标头或查询参数中发送 authToken

以下是修正后的代码以及一些说明:

1. 通过标头发送 authToken (推荐):

```javascript import { authToken } from "../main.js"

export default { ... mounted() { axios.get('/checkIsLogged', { headers: { 'Authorization': Bearer ${authToken} } }) .then(response => { console.log("authToken:", authToken); this.isLoggedIn = response.data; console.log("isLoggedIn:", this.isLoggedIn); if (this.isLoggedIn) { this.title3 = "Mi perfil"; } else { this.title1 = "Sign in"; } }) .catch(error => { console.error("Error checking login status:", error); }); }, } ```

  • 我们在 Axios 请求中添加了一个 headers 对象,其中包含 Authorization 标头。
  • Bearer ${authToken} 是将 authToken 作为 Bearer 令牌发送的标准方式。
  • 请确保 FastAPI 端点中也处理了 Authorization 标头以提取令牌。

2. 通过查询参数发送 authToken

```javascript import { authToken } from "../main.js"

export default { ... mounted() { axios.get( /checkIsLogged?authToken=${authToken} ) .then(response => { // ... (处理响应的代码与上述相同) }) .catch(error => { // ... (错误处理代码与上述相同) }); }, } ```

  • 此方法将 authToken 作为查询参数附加到 URL。
  • 在的 FastAPI 端点中,需要从查询参数中读取 authToken

    python @empresa.get("/checkIsLogged", response_model=bool) def is_token_expired(authToken: str = Query(None)): # 从查询参数获取 authToken # ... (其余代码保持不变)

其他提示:

  • 确保 authToken main.js 和的 Vue 组件中都正确设置和更新。
  • 使用 console.log 语句在的客户端和服务器代码中调试 authToken 的值。
  • 检查的浏览器开发工具中的“网络”选项卡,以查看发送到服务器的请求和从服务器接收到的响应。

通过在 Axios 请求中正确传递 authToken 并确保的 FastAPI 后端能够读取它,应该能够解决 422 错误并成功验证的用户。

标签:javascript,python,axios,vuejs3,fastapi
From: 77034246

相关文章

  • 如何在 FastAPI 中间件中以不同方式捕获或处理 RequestValidationError 异常?
    如何正确组合RequestValidationError异常处理程序,如:@app.exception_handler(RequestValidationError)asyncdefvalidation_exception_handler(request,exc):response=prepare_response({},g_ERROR__INCORRECT_PARAMS)returnJSONResponse(content=re......
  • 在 FastAPI + JWT 身份验证中如何最好地实现 is_active ?
    我的用户模型有一个字段is_active。如果为假,则说明该用户的账户被封锁。在这种情况下如何实施访问限制?我应该拒绝用户访问某些端点吗?执行此检查的最佳地点在哪里?如果is_active=False,它是否应该在get_current_user依赖项中?我的依赖项函数get_current_userasyncdefg......
  • AttributeError:'int'对象没有属性'index'(python)
    我正在Python上进行“猜单词”,但我无法弄清楚这个错误。AttributeError:'int'objecthasnoattribute'index'(python)它在线上给了我一个错误letterIndex=word.index(guess)defcheckLetter(word):blanks='_'*len(str(word))print('W......
  • 尝试在Python中使用for循环来输出大于或等于序列中的数字
    这是我的Python代码:largest_so_far=-1print('before',largest_so_far)forthe_numin[9,41,12,3,74,15]:ifthe_num>largest_so_far:largest_so_far=the_numprint(largest_so_far,'isbiggerthan',the_num)......
  • 如何在 wxPython 的 for 循环中添加文本输入框?
    我是wxPython的新手,正在开发一个带有GUI的基本程序,让用户标记图像。现在,当用户单击“导入”按钮时,他们可以选择一个目录。然后,代码使用matplotlib在for循环中显示该目录中的每个图像。但是,我不知道如何在for循环中访问用户输入。这就是该函数现在的样子:importmatplo......
  • 【Python】字母 Rangoli 图案
    一、题目YouaregivenanintegerN.YourtaskistoprintanalphabetrangoliofsizeN.(RangoliisaformofIndianfolkartbasedoncreationofpatterns.)Differentsizesofalphabetrangoliareshownbelow:#size3----c------c-b-c--c-b-a-b-c--c......
  • python 闭包、装饰器
    一、闭包:1.外部函数嵌套内部函数 2.外部函数返回内部函数 3.内部函数可以访问外部函数局部变量         闭包(Closure)是指在一个函数内部定义的函数,并且内部函数可以访问外部函数的局部变量,即使外部函数已经执行完毕,这种现象称为闭包。在Python中,闭包常常用......
  • 掌握 IPython %%time 魔法命令:高效测量代码块执行时间
    引言在编程和数据分析中,了解代码的执行时间是优化性能的关键步骤。IPython,作为一个强大的交互式计算环境,提供了多种工具来帮助用户测量和优化代码。其中,%%time魔法命令是IPython中用来测量代码块执行时间的便捷工具。本文将详细介绍%%time魔法命令的使用方法,并通过一......
  • 探索 IPython 中的 %%javascript 魔法命令:运行 JavaScript 代码的秘籍
    引言IPython是一个强大的交互式计算环境,它不仅支持Python语言,还通过各种魔法命令扩展了其功能。其中,%%javascript魔法命令是IPython扩展中一个非常有趣的特性,它允许用户在IPython环境中直接运行JavaScript代码。这对于需要在数据科学和科学计算中使用JavaScript......
  • pythonasm库分析,看看你和自学编程小学生的差距
    下面是pythonasm.asm库的源代码fromkeystoneimport*fromcapstoneimport*assembly_instructions=[]#储存汇编指令的列表#汇编指令写入列表defmov(reg1,reg2):assembly_instructions.append(f"mov{reg1},{reg2}")defdb(value):assembly_instructio......