Skip to content

Commit e1eca1e

Browse files
Merge pull request #407 from supertokens/userinfo-map
fix: user info map
2 parents 96ea6f3 + eec29e1 commit e1eca1e

File tree

6 files changed

+52
-34
lines changed

6 files changed

+52
-34
lines changed

supertokens_python/recipe/thirdparty/providers/active_directory.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,4 @@ def ActiveDirectory(
5454
if input.config.name is None:
5555
input.config.name = "Active Directory"
5656

57-
if input.config.user_info_map is None:
58-
input.config.user_info_map = UserInfoMap(UserFields(), UserFields())
59-
60-
if input.config.user_info_map.from_id_token_payload.user_id is None:
61-
input.config.user_info_map.from_id_token_payload.user_id = "sub"
62-
63-
if input.config.user_info_map.from_id_token_payload.email is None:
64-
input.config.user_info_map.from_id_token_payload.email = "email"
65-
6657
return NewProvider(input, ActiveDirectoryImpl)

supertokens_python/recipe/thirdparty/providers/custom.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,8 @@ def _normalize_input( # pylint: disable=no-self-use
215215
from_user_info_api=UserFields(),
216216
)
217217

218+
# These are safe defaults common to most providers. Each provider
219+
# implementations override these as necessary
218220
if input_config.user_info_map.from_id_token_payload.user_id is None:
219221
input_config.user_info_map.from_id_token_payload.user_id = "sub"
220222

@@ -226,6 +228,17 @@ def _normalize_input( # pylint: disable=no-self-use
226228
"email_verified"
227229
)
228230

231+
if input_config.user_info_map.from_user_info_api.user_id is None:
232+
input_config.user_info_map.from_user_info_api.user_id = "sub"
233+
234+
if input_config.user_info_map.from_user_info_api.email is None:
235+
input_config.user_info_map.from_user_info_api.email = "email"
236+
237+
if input_config.user_info_map.from_user_info_api.email_verified is None:
238+
input_config.user_info_map.from_user_info_api.email_verified = (
239+
"email_verified"
240+
)
241+
229242
if input_config.generate_fake_email is None:
230243

231244
async def default_generate_fake_email(

supertokens_python/recipe/thirdparty/providers/facebook.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,4 @@ def Facebook(input: ProviderInput) -> Provider: # pylint: disable=redefined-bui
7676
if input.config.user_info_map.from_user_info_api.user_id is None:
7777
input.config.user_info_map.from_user_info_api.user_id = "id"
7878

79-
if input.config.user_info_map.from_user_info_api.email is None:
80-
input.config.user_info_map.from_user_info_api.email = "email"
81-
82-
if input.config.user_info_map.from_user_info_api.email_verified is None:
83-
input.config.user_info_map.from_user_info_api.email = "verified"
84-
8579
return NewProvider(input, FacebookImpl)

supertokens_python/recipe/thirdparty/providers/google.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,6 @@ def Google(
5454
if input.config.user_info_map is None:
5555
input.config.user_info_map = UserInfoMap(UserFields(), UserFields())
5656

57-
if input.config.user_info_map.from_user_info_api.user_id is None:
58-
input.config.user_info_map.from_user_info_api.user_id = "id"
59-
60-
if input.config.user_info_map.from_user_info_api.email is None:
61-
input.config.user_info_map.from_user_info_api.email = "email"
62-
63-
if input.config.user_info_map.from_user_info_api.email_verified is None:
64-
input.config.user_info_map.from_user_info_api.email = "email_verified"
65-
6657
if input.config.authorization_endpoint_query_params is None:
6758
input.config.authorization_endpoint_query_params = {}
6859

supertokens_python/recipe/thirdparty/providers/okta.py

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ async def get_config_for_client_type(
3939
)
4040

4141
config.oidc_discovery_endpoint = (
42-
f"{config.additional_config.get('oktaDomain')}.okta.com"
42+
f"{config.additional_config.get('oktaDomain')}"
4343
)
4444

4545
if config.scope is None:
@@ -54,13 +54,4 @@ def Okta(input: ProviderInput) -> Provider: # pylint: disable=redefined-builtin
5454
if input.config.name is None:
5555
input.config.name = "Okta"
5656

57-
if input.config.user_info_map is None:
58-
input.config.user_info_map = UserInfoMap(UserFields(), UserFields())
59-
60-
if input.config.user_info_map.from_id_token_payload.user_id is None:
61-
input.config.user_info_map.from_id_token_payload.user_id = "sub"
62-
63-
if input.config.user_info_map.from_id_token_payload.email is None:
64-
input.config.user_info_map.from_id_token_payload.email = "email"
65-
6657
return NewProvider(input, OktaImpl)

tests/thirdparty/test_multitenancy.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,3 +223,41 @@ async def test_get_provider():
223223
provider6 = await get_provider("t3", "linkedin", None)
224224
assert provider6 is not None
225225
assert provider6.config.third_party_id == "linkedin"
226+
227+
228+
async def test_get_provider_returns_correct_config_from_core():
229+
args = get_st_init_args([thirdparty.init()])
230+
init(**args) # type: ignore
231+
start_st()
232+
setup_multitenancy_feature()
233+
234+
await create_or_update_third_party_config(
235+
"public",
236+
thirdparty.ProviderConfig(
237+
"google",
238+
clients=[
239+
thirdparty.ProviderClientConfig(
240+
client_id="core-client-id",
241+
client_secret="core-secret",
242+
)
243+
],
244+
),
245+
)
246+
247+
thirdparty_info = await get_provider("public", "google")
248+
assert thirdparty_info is not None
249+
assert thirdparty_info.config.third_party_id == "google"
250+
251+
client = thirdparty_info.config.clients[0]
252+
assert client.client_id == "core-client-id"
253+
assert client.client_secret == "core-secret"
254+
assert thirdparty_info.config.user_info_map.from_id_token_payload == {
255+
"userId": "sub",
256+
"email": "email",
257+
"emailVerified": "email_verified",
258+
}
259+
assert thirdparty_info.config.user_info_map.from_user_info_api == {
260+
"userId": "sub",
261+
"email": "email",
262+
"emailVerified": "email_verified",
263+
}

0 commit comments

Comments
 (0)