3

基本上我想从 Linkedin 获取用户个人资料链接。我使用 Laravel Socialite 和Socialite Providers从 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'),
   ]);
}

但随后链接将为“空”。

有人知道如何解决这个问题吗?

4

1 回答 1

1

我目前已经解决了这个问题。

在 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'),
    ]);
}

希望有人会发现这很有用。

注意
这是在供应商目录中!每当您对项目进行(作曲家)更新时,都可以丢弃此代码。

于 2015-05-22T15:59:03.800 回答