@@ -70,7 +70,8 @@ <h1 class="title">Module <code>supertokens_python.recipe.thirdparty.providers.li
7070 config = await super().get_config_for_client_type(client_type, user_context)
7171
7272 if config.scope is None:
73- config.scope = ["r_emailaddress", "r_liteprofile"]
73+ # https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2?context=linkedin%2Fconsumer%2Fcontext#authenticating-members
74+ config.scope = ["openid", "profile", "email"]
7475
7576 return config
7677
@@ -87,31 +88,17 @@ <h1 class="title">Module <code>supertokens_python.recipe.thirdparty.providers.li
8788 }
8889
8990 raw_user_info_from_provider = RawUserInfoFromProvider({}, {})
91+ # https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2?context=linkedin%2Fconsumer%2Fcontext#sample-api-response
9092 user_info = await do_get_request(
91- "https://api.linkedin.com/v2/me ", headers=headers
93+ "https://api.linkedin.com/v2/userinfo ", headers=headers
9294 )
9395 raw_user_info_from_provider.from_user_info_api = user_info
9496
95- email_api_url = "https://api.linkedin.com/v2/emailAddress"
96- email_info: Dict[str, Any] = await do_get_request(
97- email_api_url,
98- query_params={"q": "members", "projection": "(elements*(handle~))"},
99- headers=headers,
100- )
101-
102- if email_info.get("elements") is not None and len(email_info.get("elements")) > 0: # type: ignore
103- raw_user_info_from_provider.from_user_info_api["email"] = email_info.get("elements")[0].get("handle~").get("emailAddress") # type: ignore
104-
105- raw_user_info_from_provider.from_user_info_api = {
106- **raw_user_info_from_provider.from_user_info_api,
107- **email_info,
108- }
109-
11097 return UserInfo(
111- third_party_user_id=raw_user_info_from_provider.from_user_info_api.get("id "), # type: ignore
98+ third_party_user_id=raw_user_info_from_provider.from_user_info_api.get("sub "), # type: ignore
11299 email=UserInfoEmail(
113100 email=raw_user_info_from_provider.from_user_info_api.get("email"), # type: ignore
114- is_verified=False,
101+ is_verified=raw_user_info_from_provider.from_user_info_api.get("email_verified"), # type: ignore
115102 ),
116103 )
117104
@@ -214,7 +201,8 @@ <h2 class="section-title" id="header-classes">Classes</h2>
214201 config = await super().get_config_for_client_type(client_type, user_context)
215202
216203 if config.scope is None:
217- config.scope = ["r_emailaddress", "r_liteprofile"]
204+ # https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2?context=linkedin%2Fconsumer%2Fcontext#authenticating-members
205+ config.scope = ["openid", "profile", "email"]
218206
219207 return config
220208
@@ -231,31 +219,17 @@ <h2 class="section-title" id="header-classes">Classes</h2>
231219 }
232220
233221 raw_user_info_from_provider = RawUserInfoFromProvider({}, {})
222+ # https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2?context=linkedin%2Fconsumer%2Fcontext#sample-api-response
234223 user_info = await do_get_request(
235- "https://api.linkedin.com/v2/me ", headers=headers
224+ "https://api.linkedin.com/v2/userinfo ", headers=headers
236225 )
237226 raw_user_info_from_provider.from_user_info_api = user_info
238227
239- email_api_url = "https://api.linkedin.com/v2/emailAddress"
240- email_info: Dict[str, Any] = await do_get_request(
241- email_api_url,
242- query_params={"q": "members", "projection": "(elements*(handle~))"},
243- headers=headers,
244- )
245-
246- if email_info.get("elements") is not None and len(email_info.get("elements")) > 0: # type: ignore
247- raw_user_info_from_provider.from_user_info_api["email"] = email_info.get("elements")[0].get("handle~").get("emailAddress") # type: ignore
248-
249- raw_user_info_from_provider.from_user_info_api = {
250- **raw_user_info_from_provider.from_user_info_api,
251- **email_info,
252- }
253-
254228 return UserInfo(
255- third_party_user_id=raw_user_info_from_provider.from_user_info_api.get("id "), # type: ignore
229+ third_party_user_id=raw_user_info_from_provider.from_user_info_api.get("sub "), # type: ignore
256230 email=UserInfoEmail(
257231 email=raw_user_info_from_provider.from_user_info_api.get("email"), # type: ignore
258- is_verified=False,
232+ is_verified=raw_user_info_from_provider.from_user_info_api.get("email_verified"), # type: ignore
259233 ),
260234 )</ code > </ pre >
261235</ details >
@@ -281,7 +255,8 @@ <h3>Methods</h3>
281255 config = await super().get_config_for_client_type(client_type, user_context)
282256
283257 if config.scope is None:
284- config.scope = ["r_emailaddress", "r_liteprofile"]
258+ # https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2?context=linkedin%2Fconsumer%2Fcontext#authenticating-members
259+ config.scope = ["openid", "profile", "email"]
285260
286261 return config</ code > </ pre >
287262</ details >
@@ -308,31 +283,17 @@ <h3>Methods</h3>
308283 }
309284
310285 raw_user_info_from_provider = RawUserInfoFromProvider({}, {})
286+ # https://learn.microsoft.com/en-us/linkedin/consumer/integrations/self-serve/sign-in-with-linkedin-v2?context=linkedin%2Fconsumer%2Fcontext#sample-api-response
311287 user_info = await do_get_request(
312- "https://api.linkedin.com/v2/me ", headers=headers
288+ "https://api.linkedin.com/v2/userinfo ", headers=headers
313289 )
314290 raw_user_info_from_provider.from_user_info_api = user_info
315291
316- email_api_url = "https://api.linkedin.com/v2/emailAddress"
317- email_info: Dict[str, Any] = await do_get_request(
318- email_api_url,
319- query_params={"q": "members", "projection": "(elements*(handle~))"},
320- headers=headers,
321- )
322-
323- if email_info.get("elements") is not None and len(email_info.get("elements")) > 0: # type: ignore
324- raw_user_info_from_provider.from_user_info_api["email"] = email_info.get("elements")[0].get("handle~").get("emailAddress") # type: ignore
325-
326- raw_user_info_from_provider.from_user_info_api = {
327- **raw_user_info_from_provider.from_user_info_api,
328- **email_info,
329- }
330-
331292 return UserInfo(
332- third_party_user_id=raw_user_info_from_provider.from_user_info_api.get("id "), # type: ignore
293+ third_party_user_id=raw_user_info_from_provider.from_user_info_api.get("sub "), # type: ignore
333294 email=UserInfoEmail(
334295 email=raw_user_info_from_provider.from_user_info_api.get("email"), # type: ignore
335- is_verified=False,
296+ is_verified=raw_user_info_from_provider.from_user_info_api.get("email_verified"), # type: ignore
336297 ),
337298 )</ code > </ pre >
338299</ details >
0 commit comments