@@ -19,11 +19,12 @@ async def save_authorize_data(self, request, **kwargs):
19
19
else :
20
20
raise RuntimeError ('Missing state value' )
21
21
22
- async def authorize_redirect (self , request , redirect_uri = None , ** kwargs ):
22
+ async def authorize_redirect (self , request , redirect_uri = None , extra_state = None , ** kwargs ):
23
23
"""Create a HTTP Redirect for Authorization Endpoint.
24
24
25
25
:param request: HTTP request instance from Starlette view.
26
26
:param redirect_uri: Callback or redirect URI for authorization.
27
+ :param extra_state: Extra state data to be stored in session.
27
28
:param kwargs: Extra parameters to include.
28
29
:return: A HTTP redirect response.
29
30
"""
@@ -32,6 +33,8 @@ async def authorize_redirect(self, request, redirect_uri=None, **kwargs):
32
33
if redirect_uri and isinstance (redirect_uri , URL ):
33
34
redirect_uri = str (redirect_uri )
34
35
rv = await self .create_authorization_url (redirect_uri , ** kwargs )
36
+ if extra_state is not None :
37
+ rv ['extra_state' ] = extra_state
35
38
await self .save_authorize_data (request , redirect_uri = redirect_uri , ** rv )
36
39
return RedirectResponse (rv ['url' ], status_code = 302 )
37
40
@@ -83,4 +86,6 @@ async def authorize_access_token(self, request, **kwargs):
83
86
if 'id_token' in token and 'nonce' in state_data :
84
87
userinfo = await self .parse_id_token (token , nonce = state_data ['nonce' ], claims_options = claims_options )
85
88
token ['userinfo' ] = userinfo
89
+ if 'extra_state' in state_data :
90
+ token ['extra_state' ] = state_data ['extra_state' ]
86
91
return token
0 commit comments