Skip to content

Commit e4e8d74

Browse files
committed
Pass returnUrl in app_state
1 parent f77aa7e commit e4e8d74

File tree

2 files changed

+21
-19
lines changed

2 files changed

+21
-19
lines changed

src/auth0_fastapi/auth/auth_client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ async def complete_login(
8686
async def start_connect_account(
8787
self,
8888
connection: str,
89+
app_state: dict = None,
8990
authorization_params: dict = None,
9091
store_options: dict = None,
9192
) -> str:
@@ -96,23 +97,22 @@ async def start_connect_account(
9697
"""
9798
options = ConnectAccountOptions(
9899
connection=connection,
100+
app_state=app_state,
99101
authorization_params= authorization_params
100102
)
101103
return await self.client.start_connect_account(options=options, store_options=store_options)
102104

103105
async def complete_connect_account(
104106
self,
105-
connect_code: str,
106-
state: str,
107+
url: str,
107108
store_options: dict = None,
108109
) -> str:
109110
"""
110111
Initiates the interactive login process.
111112
Optionally, an app_state dictionary can be passed to persist additional state.
112113
Returns the authorization URL to redirect the user.
113114
"""
114-
return await self.client.complete_connect_account(
115-
connect_code=connect_code, state=state, store_options=store_options)
115+
return await self.client.complete_connect_account(url, store_options=store_options)
116116

117117
async def logout(
118118
self,

src/auth0_fastapi/server/routes.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -61,27 +61,26 @@ async def callback(
6161
Processes the callback URL and completes the login or connected account flow.
6262
Redirects the user to a post-login URL based on appState or a default.
6363
"""
64-
connect_code = request.query_params.get("connect_code")
65-
if connect_code and config.mount_connected_account_routes:
66-
state = request.query_params.get("state")
67-
return await auth_client.complete_connect_account(
68-
connect_code=connect_code,
69-
state=state,
70-
store_options={"request": request, "response": response},
71-
)
72-
7364
full_callback_url = str(request.url)
7465

7566
try:
76-
session_data = await auth_client.complete_login(
77-
full_callback_url,
78-
store_options={"request": request, "response": response},
79-
)
67+
if "connect_code" in request.query_params.keys() and config.mount_connected_account_routes:
68+
connect_complete_response = await auth_client.complete_connect_account(
69+
full_callback_url, store_options={"request": request, "response": response})
70+
71+
app_state = connect_complete_response.app_state or {}
72+
else:
73+
session_data = await auth_client.complete_login(
74+
full_callback_url,store_options={"request": request, "response": response})
75+
76+
# Extract the returnTo URL from the appState if available.
77+
app_state = session_data.get("app_state", {})
8078
except Exception as e:
8179
raise HTTPException(status_code=400, detail=str(e))
8280

81+
8382
# Extract the returnTo URL from the appState if available.
84-
return_to = session_data.get("app_state", {}).get("returnTo")
83+
return_to = app_state.get("returnTo")
8584

8685
# Assuming config is stored on app.state
8786
default_redirect = auth_client.config.app_base_url
@@ -146,9 +145,12 @@ async def connect_account(
146145
Redirects the user to the Auth0 connect account URL.
147146
"""
148147
authorization_params = {k: v for k, v in request.query_params.items() if k not in [
149-
"connection"]}
148+
"connection", "returnTo"]}
149+
150+
return_to = request.query_params.get("returnTo")
150151
connect_account_url = await auth_client.start_connect_account(
151152
connection=connection,
153+
app_state={"returnTo": return_to} if return_to else None,
152154
authorization_params=authorization_params,
153155
store_options={"request": request, "response": response},
154156
)

0 commit comments

Comments
 (0)