Skip to content

Commit 24f890d

Browse files
Memorize the access token (GH-38)
2 parents 3edfeb8 + 1246c1a commit 24f890d

File tree

5 files changed

+28
-3
lines changed

5 files changed

+28
-3
lines changed

setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ license_files = LICENSE
2727
platforms = unix, linux, osx, win32
2828
classifiers =
2929
Operating System :: OS Independent
30-
Development Status :: 4 - Beta
30+
Development Status :: 5 - Production/Stable
3131
Framework :: FastAPI
3232
Programming Language :: Python
3333
Programming Language :: Python :: 3

src/fastapi_oauth2/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "1.0.0-beta.3"
1+
__version__ = "1.0.0"

src/fastapi_oauth2/core.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class OAuth2Core:
5454
_oauth_client: Optional[WebApplicationClient] = None
5555
_authorization_endpoint: str = None
5656
_token_endpoint: str = None
57+
_access_token: str = None
5758
_state: str = None
5859

5960
def __init__(self, client: OAuth2Client) -> None:
@@ -70,7 +71,9 @@ def __init__(self, client: OAuth2Client) -> None:
7071

7172
@property
7273
def access_token(self) -> str:
73-
return self._oauth_client.access_token
74+
if not self._access_token:
75+
self._access_token = self._oauth_client.access_token
76+
return self._access_token
7477

7578
def get_redirect_uri(self, request: Request) -> str:
7679
return urljoin(str(request.base_url), "/oauth2/%s/token" % self.provider)

tests/conftest.py

+4
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ def auth(request: Request):
7878
)
7979
return response
8080

81+
@app_router.get("/access-token")
82+
def access_token(request: Request):
83+
return Response(request.auth.provider.access_token)
84+
8185
if with_idp:
8286
@app_router.get("/oauth2/{provider}/token")
8387
async def token(request: Request, provider: str):

tests/test_oauth2.py

+18
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,21 @@ async def test_oauth2_csrf_workflow(get_app):
6262
await oauth2_workflow(get_app, idp=True, ssr=False, authorize_query=aq, token_query=tq, use_header=True)
6363
except AssertionError:
6464
assert aq != tq
65+
66+
67+
@pytest.mark.anyio
68+
async def test_core_access_token(get_app):
69+
async with AsyncClient(app=get_app(with_idp=True, with_ssr=True), base_url="http://test") as client:
70+
response = await client.get("/oauth2/test/authorize")
71+
authorization_endpoint = response.headers.get("location")
72+
response = await client.get(authorization_endpoint)
73+
token_url = response.headers.get("location")
74+
query = {k: v[0] for k, v in parse_qs(urlparse(token_url).query).items()}
75+
token_url = "%s?%s" % (token_url.split("?")[0], urlencode(query))
76+
await client.get(token_url)
77+
78+
response = await client.get("/access-token")
79+
assert response.content != b""
80+
81+
response = await client.get("/access-token")
82+
assert response.content != b""

0 commit comments

Comments
 (0)