FastAPI部署AWS Lambda时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
相关产品推荐
相关产品推荐

