@@ -70,7 +70,8 @@ <h1 class="title">Module <code>supertokens_python.recipe.thirdparty.providers.li
70
70
config = await super().get_config_for_client_type(client_type, user_context)
71
71
72
72
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"]
74
75
75
76
return config
76
77
@@ -87,31 +88,17 @@ <h1 class="title">Module <code>supertokens_python.recipe.thirdparty.providers.li
87
88
}
88
89
89
90
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
90
92
user_info = await do_get_request(
91
- "https://api.linkedin.com/v2/me ", headers=headers
93
+ "https://api.linkedin.com/v2/userinfo ", headers=headers
92
94
)
93
95
raw_user_info_from_provider.from_user_info_api = user_info
94
96
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
-
110
97
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
112
99
email=UserInfoEmail(
113
100
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
115
102
),
116
103
)
117
104
@@ -214,7 +201,8 @@ <h2 class="section-title" id="header-classes">Classes</h2>
214
201
config = await super().get_config_for_client_type(client_type, user_context)
215
202
216
203
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"]
218
206
219
207
return config
220
208
@@ -231,31 +219,17 @@ <h2 class="section-title" id="header-classes">Classes</h2>
231
219
}
232
220
233
221
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
234
223
user_info = await do_get_request(
235
- "https://api.linkedin.com/v2/me ", headers=headers
224
+ "https://api.linkedin.com/v2/userinfo ", headers=headers
236
225
)
237
226
raw_user_info_from_provider.from_user_info_api = user_info
238
227
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
-
254
228
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
256
230
email=UserInfoEmail(
257
231
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
259
233
),
260
234
)</ code > </ pre >
261
235
</ details >
@@ -281,7 +255,8 @@ <h3>Methods</h3>
281
255
config = await super().get_config_for_client_type(client_type, user_context)
282
256
283
257
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"]
285
260
286
261
return config</ code > </ pre >
287
262
</ details >
@@ -308,31 +283,17 @@ <h3>Methods</h3>
308
283
}
309
284
310
285
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
311
287
user_info = await do_get_request(
312
- "https://api.linkedin.com/v2/me ", headers=headers
288
+ "https://api.linkedin.com/v2/userinfo ", headers=headers
313
289
)
314
290
raw_user_info_from_provider.from_user_info_api = user_info
315
291
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
-
331
292
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
333
294
email=UserInfoEmail(
334
295
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
336
297
),
337
298
)</ code > </ pre >
338
299
</ details >
0 commit comments