Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Setting SameSite flag manually when using response.set_cookie() #1099

@zero-shubham

Description

@zero-shubham

Since as of now starlette's response.set_cookie() does not support (starlette==0.13.2 and fastapi==0.52.0) 'samesite flag' so i did it manually as following -

@app.middleware("http")
async def cookie_set(request: Request, call_next):
    response = await call_next(request)
    if request.user and request.user.set_response_cookie:
        token = request.user.set_response_cookie
        response.set_cookie(
            key="Authorization",
            value=token["jwt"].decode("utf-8"),
            expires=token["expires"],
            httponly=True,
            path="/",
            secure=True
        )
    else:
        response.delete_cookie(
            key="Authorization",
            path="/"
        )
    # just adding samesite flag to set-cookie headers
    for idx, header in enumerate(response.raw_headers):
        if header[0].decode("utf-8") == "set-cookie":
            cookie = header[1].decode("utf-8")
            if "SameSite=None" not in cookie:
                cookie = cookie + "; SameSite=None"
                response.raw_headers[idx] = (header[0], cookie.encode())

    return response

is this okay?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions