【问题标题】:Laravel Socialite extend fieldsLaravel Socialite 扩展字段
【发布时间】:2015-05-22 23:59:03
【问题描述】:

基本上我想从 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'),
   ]);
}

但是链接将是“null”。

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

【问题讨论】:

    标签: php laravel laravel-5 laravel-socialite


    【解决方案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'),
        ]);
    }
    

    希望有人会觉得这很有用。

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

    【讨论】:

    • 我遵循了您的解决方案,但不想丢失对每个 composer update 的编辑。因此,我将 socialiteproviders 文件夹复制到了一个顶级的 packages 文件夹中,该文件夹用于我自己的(非作曲家)包。然后只需从 composer.json 中的 require 块中删除它,并像这样将两条路由添加到 autoload/psr-4:"SocialiteProviders\\LinkedIn\\": "packages/socialiteproviders/linkedin/src","SocialiteProviders\\Manager\\": "packages/socialiteproviders/manager/src"。现在运行作曲家更新,一切都应该正常。
    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2020-10-10
    • 2019-09-09
    • 2018-03-22
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多