如何解决如何检查FastAPI中是否设置了cookie?
我定义了一个可选的cookie参数,现在要检查是否设置了cookie。不幸的是,该变量不等于None
,而是一个空的Cookie
对象。如何检查cookie对象是否已设置?
这是我定义Cookie参数的方法:
@app.route("/graphcall")
def graphcall(request: Request,ads_id: Optional[str] = Cookie(None)):
if ads_id:
# Do stuff if the ads_id is set
解决方法
我认为您是通过SwaggerUI尝试过的。由于浏览器安全限制,当前无法通过SwaggerUI设置Cookie值。
@app.get("/items/")
async def read_items(ads_id: Optional[str] = Cookie(None)):
if ads_id:
answer = "set to %s" % ads_id
else:
answer = "not set"
return {"ads_id": answer}
在命令行中使用Fastapi 0.61.0完美运行
$ curl -X GET "http://127.0.0.1:8000/items/" -H "accept: application/json" -H "Cookie: ads_id=foobar"
{"ads_id":"set to foobar"}
$ curl -X GET "http://127.0.0.1:8000/items/" -H "accept: application/json"
{"ads_id":"not set"}
,
对我来说这有效
async def setcookie(request: Request,nm: str = Form(...)):
print("setcookie "+nm)
response = templates.TemplateResponse("readcookie.html",{"request": request})
response.set_cookie(key="userID",value=nm)
@app.get("/getcookie/",response_class=HTMLResponse)
async def getcookie(request: Request,userID: Optional[str] = Cookie(None)):
if userID:
print("getcookie "+userID)
else:
print("getcookie None")
return templates.TemplateResponse("showcookie.html",{"request": request,"name": userID})
在getcookie中,我在setcookie中设置了cookie。
我遵循这种方法:
https://fastapi.tiangolo.com/advanced/response-cookies/#return-a-response-directly
,我仍然不明白为什么 Optional[str] = Cookie(None)
方法不起作用。对我来说,这种方式有效
@router.post('/login')
async def sign_in(
user_data: OAuth2PasswordRequestForm = Depends(),service: AuthService = Depends(),):
session = await service.authenticate_user(
user_data.username,user_data.password
)
response = RedirectResponse(url='/')
response.set_cookie('Authorization',value=session['session_id'],httponly=True)
return response
async def get_current_user(request: Request):
try:
cookie_authorization: str = request.cookies.get("Authorization")
# some logic with cookie_authorization
except Exception as e:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,detail="Invalid authentication"
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。