2015-05-22 4 views
3

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

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

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

Так я хотел распространить эту информацию с «общественно-профильных URL», это базовый профиль Поле из Linkedin.

Я пытался сделать что-то подобное в "MyProject/поставщика/socialiteproviders// ЦСИ LinkedIn/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'), 
    ]); 
} 

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

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

ответ

1

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

В MyProject/продавец/socialiteproviders/LinkedIn/SRC/Provider.php Я добавил поле 'Государственно-профиль-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

Я следил за вашим решением, но не хотел потерять свои изменения в каждом «обновлении композитора». Поэтому я скопировал папку socialiteproviders в папку 'packages' верхнего уровня, которую я использую для своих (не-композитных) пакетов. Затем просто удалите его из блока 'require' в composer.json и добавьте два пути к автозагрузке/psr-4 следующим образом:' "SocialiteProviders \\ LinkedIn \\": "packages/socialiteproviders/linkedin/src", ' и "SocialiteProviders \\ Manager \\": "packages/socialiteproviders/manager/src". Теперь запустите обновление для композитора, и все должно работать нормально. – Fixspec