You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI部署AWS Lambda时Cookie值被额外引号包裹致无效的解决咨询

AWS Lambda部署FastAPI后Cookie值被添加多余引号的问题解决

问题原因

这个问题的核心是FastAPI通过Mangum适配器部署到Lambda时,API Gateway(尤其是HTTP API类型)会对Cookie值做额外的JSON序列化转义。本地用uvicorn运行时,响应头直接返回给客户端,不会经过额外处理;但部署到Lambda后,API Gateway在转发响应时,会把Cookie的值当成JSON字符串处理,导致原本的Bearer <access_token>被自动包裹上双引号,变成"Bearer <access_token>",进而导致Cookie失效。

解决方案

  • 升级Mangum到最新版本
    早期版本的Mangum和API Gateway的响应头处理存在兼容性问题,新版本已经修复了这个Cookie转义bug。执行以下命令升级:

    pip install --upgrade mangum
    
  • 配置Mangum强制文本响应
    如果升级后问题仍存在,可以在初始化Mangum handler时设置text_responses=True,强制以纯文本格式处理响应头,避免不必要的JSON序列化:

    from mangum import Mangum
    from fastapi import FastAPI
    
    app = FastAPI()
    # 你的路由定义...
    
    handler = Mangum(app, text_responses=True)
    
  • 手动构建Set-Cookie响应头
    绕过FastAPI内置的set_cookie方法,直接手动拼接Set-Cookie响应头,确保值不会被自动转义:

    from fastapi import FastAPI, Response, Depends
    from fastapi.security import OAuth2PasswordRequestForm
    from pydantic import BaseModel
    
    class Token(BaseModel):
        access_token: str
        token_type: str
    
    app = FastAPI()
    
    @app.post("/token", response_model=Token)
    async def login_for_access_token(response: Response, form_data: OAuth2PasswordRequestForm = Depends()):
        access_token = "<access_token>"
        # 手动拼接Cookie的完整字符串
        set_cookie_header = (
            f"access_token=Bearer {access_token};"
            " HttpOnly;"
            " SameSite=None;"
            " Secure"
        )
        response.headers.append("Set-Cookie", set_cookie_header)
        return {"access_token": access_token, "token_type": "bearer"}
    

内容的提问来源于stack exchange,提问作者J-T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:25:22