【问题标题】:How to redirect the user after login using fetch() POST request?fastapi 的 redirectResponse 方法不会将我重定向到任何站点
【发布时间】:2023-01-22 12:21:42
【问题描述】:

我执行此 POST,然后重定向到 /1,这是一个 get,并使用 status_code 303,这是 tiangolo 在文档中指定它从 post 重定向到 GET 的方式

@router.post("/login")
async def login(x_auth_token: str = Header(None)):
    valid_token = auth.verify_id_token(x_auth_token)
   
    if valid_token:
        print("token validado")
        return RedirectResponse(url="/1", status_code=status.HTTP_303_SEE_OTHER)
    else:
        return {"msg": "Token no recibido"}

我确实重定向了 GET

@app.get("/1")
def get_landing(request: Request):
    return templates.TemplateResponse("landing.html", {"request": request})

但不会重定向到任何站点

【问题讨论】:

  • 请包括相关代码和详细信息作为文本.图片的可访问性差,需要读者来回切换,不允许复制粘贴代码或在答案中引用细节,并且无法搜索任何相关细节。
  • 请避免附加代码图片,而是使用正确的格式(使用 ctrl+k)附加代码本身,包括您的导入和相关的所有其他内容
  • 完了,对不起各位!
  • 您是否尝试过不指定 url 关键字?喜欢RedirectResponse("/1", status_code=status.HTTP_303_SEE_OTHER)
  • INFO: 127.0.0.1:53670 - "POST /login HTTP/1.1" 303 See Other INFO: 127.0.0.1:53670 - "GET /1 HTTP/1.1" 200 OK 错误是我正在发送一个 get ?

标签: python http redirect fastapi http-redirect


【解决方案1】:

我看到的可能导致它不起作用的主要“问题”是您从 Post 请求到 Get 请求的速度太快了。

在网上进行一些搜索后,我偶然发现了这个[BUG] RedirectResponse from a POST request route to GET request route,如果你会阅读这个错误,你会看到他们指定有时你可能需要 307 而不是你可以在此处阅读有关 307 响应的信息307 Temporary Redirect

据此,以下内容应该有所帮助:

import starlette.status as status
from fastapi.responses import RedirectResponse

@router.post("/login")
async def login(x_auth_token: str = Header(None))
    # Implementation details ...
    return RedirectResponse('/1', status_code=status.HTTP_302_FOUND)

@app.get("/1")
def get_landing(request: Request):
    return templates.TemplateResponse("landing.html", {"request": request})

据我所见,这里的解决方案是使用status_code=status.HTTP_302_FOUND,您可以在这里了解更多信息:What Is a 302 Status Code?

您还可以参考以下链接了解更多信息:

  1. fastapi (starlette) RedirectResponse redirect to post instead get method
  2. How to do a Post/Redirect/Get (PRG) in FastAPI?
  3. [QUESTION] How to post/redirect/get
  4. RedirectResponse

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-28
    • 2020-09-28
    • 2012-08-12
    • 2021-02-07
    • 1970-01-01
    • 2015-05-30
    • 2014-08-18
    • 2012-04-18
    相关资源
    最近更新 更多