Laravel Socialite расширяет поля

В основном я хочу получить ссылку на профиль пользователя от Linkedin. Я использую Laravel Socialite с Социальные провайдеры чтобы получить информацию от Linkedin.

Когда пользователь успешно перенаправляется обратно на мой сайт, я отлаживал информацию:

User {#285 ▼
+token: "XXX"+id: "XXX"+nickname: null
+name: "XXX"+email: "XXX"+avatar: "XXX"+"user": array:4 [▶]
}

Поэтому я хотел расширить эту информацию с помощью «public-profile-url», это поле базового профиля от Linkedin.

Я пытался сделать что-то вроде этого в «myproject / vendor / socialiteproviders / linkedin / src / Provider.php»:

/**
* {@inheritdoc}
*/
protected function mapUserToObject(array $user)
{
return (new User())->setRaw($user)->map([
'id' => $user['id'], 'nickname' => null,
'name' => $user['formattedName'], 'email' => $user['emailAddress'],
'avatar' => array_get($user, 'pictureUrl'),
'link' => array_get($user, 'publicProfileUrl'),
]);
}

Но тогда ссылка будет «нулевой».

Кто-нибудь знает, как решить эту проблему?

3

Решение

Я в настоящее время исправил проблему.

В myproject / vendor / socialiteproviders / linkedin / src / Provider.php я добавил поле ‘public-profile-url’ в URL:

/**
* {@inheritdoc}
*/
protected function getUserByToken($token)
{
$response = $this->getHttpClient()->get(
'https://api.linkedin.com/v1/people/~:(id,formatted-name,picture-url,email-address,public-profile-url)', [
'headers' => [
'Accept-Language' => 'en-US',
'x-li-format'     => 'json',
'Authorization'   => 'Bearer '.$token,
],
]);

return json_decode($response->getBody(), true);
}

Когда вы сделаете это, вы можете получить доступ к полю ‘publicProfileUrl’ в пользовательском массиве, например:

/**
* {@inheritdoc}
*/
protected function mapUserToObject(array $user)
{
return (new User())->setRaw($user)->map([
'id' => $user['id'], 'nickname' => null,
'name' => $user['formattedName'], 'email' => $user['emailAddress'],
'avatar' => array_get($user, 'pictureUrl'),
'profileUrl' => array_get($user, 'publicProfileUrl'),
]);
}

Надеюсь, кто-нибудь найдет это полезным.

уведомление
Это в каталоге поставщиков! Этот код можно выбрасывать всякий раз, когда вы делаете (композитор) обновление для вашего проекта.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]