Skip to content

Commit 33b42dc

Browse files
Add optional SameSite property for session cookie (GH-50)
Co-authored-by: Jung Hun-soo <[email protected]>
2 parents cbdf342 + d076d9e commit 33b42dc

File tree

7 files changed

+12
-1
lines changed

7 files changed

+12
-1
lines changed

docs/integration/configuration.md

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ The `OAuth2Config` class is used to define the middleware configuration, and it
1010

1111
- `enable_ssr` - Whether enable server-side rendering or not. Defaults to `True`.
1212
- `allow_http` - Whether allow HTTP requests or not. Defaults to `False`.
13+
- `same_site` -
14+
The [SameSite](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value) attribute
15+
of the session cookie. Defaults to `lax`.
1316
- `jwt_secret` - Secret used to sign the JWT tokens. Defaults to an empty string.
1417
- `jwt_expires` - JWT lifetime in seconds. Defaults to 900 (15 minutes).
1518
- `jwt_algorithm` - The algorithm used to sign the JWT tokens. Defaults to `HS256`.

examples/demonstration/router_api.py

+1
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@ def sim_auth(request: Request):
2828
max_age=request.auth.expires,
2929
expires=request.auth.expires,
3030
httponly=request.auth.http,
31+
samesite=request.auth.same_site,
3132
)
3233
return response

src/fastapi_oauth2/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "1.2.0"
1+
__version__ = "1.3.0"

src/fastapi_oauth2/config.py

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ class OAuth2Config:
1010

1111
enable_ssr: bool
1212
allow_http: bool
13+
same_site: str
1314
jwt_secret: str
1415
jwt_expires: int
1516
jwt_algorithm: str
@@ -20,6 +21,7 @@ def __init__(
2021
*,
2122
enable_ssr: bool = True,
2223
allow_http: bool = False,
24+
same_site: str = "lax",
2325
jwt_secret: str = "",
2426
jwt_expires: Union[int, str] = 900,
2527
jwt_algorithm: str = "HS256",
@@ -29,6 +31,7 @@ def __init__(
2931
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
3032
self.enable_ssr = enable_ssr
3133
self.allow_http = allow_http
34+
self.same_site = same_site
3235
self.jwt_secret = jwt_secret
3336
self.jwt_expires = int(jwt_expires)
3437
self.jwt_algorithm = jwt_algorithm

src/fastapi_oauth2/core.py

+1
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ async def token_redirect(self, request: Request, **kwargs) -> RedirectResponse:
145145
expires=request.auth.expires,
146146
secure=not request.auth.http,
147147
httponly=True,
148+
samesite=request.auth.same_site,
148149
)
149150
return response
150151

src/fastapi_oauth2/middleware.py

+2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class Auth(AuthCredentials):
3939
http: bool
4040
secret: str
4141
expires: int
42+
same_site: str
4243
algorithm: str
4344
scopes: List[str]
4445
provider: OAuth2Core
@@ -92,6 +93,7 @@ def __init__(
9293
Auth.http = config.allow_http
9394
Auth.secret = config.jwt_secret
9495
Auth.expires = config.jwt_expires
96+
Auth.same_site = config.same_site
9597
Auth.algorithm = config.jwt_algorithm
9698
Auth.clients = {
9799
client.backend.name: OAuth2Core(client)

tests/conftest.py

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ def auth(request: Request):
7575
max_age=request.auth.expires,
7676
expires=request.auth.expires,
7777
httponly=request.auth.http,
78+
samesite=request.auth.same_site,
7879
)
7980
return response
8081

0 commit comments

Comments
 (0)