【问题标题】:Laravel Socialite 410 Gone This resource is no longer available under v1 APIsLaravel Socialite 410 Gone 此资源在 v1 API 下不再可用
【发布时间】:2019-10-29 08:02:38
【问题描述】:

当我尝试通过linkedin api 登录时。我收到了这些错误

客户端错误:`GET https://api.linkedin.com/v1/people/~:(id,first-name,last-
name,formatted-name,email-address,headline,location,industry,public -profile-url,
picture-url,picture-urls::(original))` 导致 `410 Gone`
响应:{ "errorCode": 0, "message": "This resource is no在 v1
APIs 下不再可用", "requestId": "56NEB1WQC2", "s (截断...)
 */
public function redirectToProvider()
{
    return Socialite::driver('linkedin')->redirect();
}

/**
 * Obtain the user information from GitHub.
 *
 * @return \Illuminate\Http\Response
 */
public function handleProviderCallback()
{
    $userSocial = Socialite::driver('linkedin')->user();


    //check if user exists and log user in

    $user = User::where('email', $userSocial->email)->first();
    if($user){
        if(Auth::loginUsingId($user->id)){
           return redirect()->route('home');
        }
    }

 //else sign the user up
 $userSignup = User::create([
        'name' => $userSocial->name,
        'email' => $userSocial->email,
        'password' => bcrypt('1234'),
        'avatar'=> $userSocial->avatar,
        'linkedIn_profile'=> $userSocial->user['link'],
        'role_id' => '10'
    ]);


    //finally log the user in
    if($userSignup){
        if(Auth::loginUsingId($userSignup->id)){
            return redirect()->route('home');
        }
    }

}

}

【问题讨论】:

    标签: php laravel laravel-5 linkedin-api


    【解决方案1】:

    Socialite issue github repo

    问题已解决
    我已经用这个更新了我的 socialite/src/Two/LinkedInProvider.php 文件:-

    <?php
    
    namespace Laravel\Socialite\Two;
    
    use Illuminate\Support\Arr;
    
    class LinkedInProvider extends AbstractProvider implements ProviderInterface
    {
        /**
         * The scopes being requested.
         *
         * @var array
         */
        protected $scopes = ['r_liteprofile', 'r_emailaddress'];
    
    /**
     * The separating character for the requested scopes.
     *
     * @var string
     */
    protected $scopeSeparator = ' ';
    
    /**
     * {@inheritdoc}
     */
    protected function getAuthUrl($state)
    {
        return $this->buildAuthUrlFromBase('https://www.linkedin.com/oauth/v2/authorization', $state);
    }
    
    /**
     * {@inheritdoc}
     */
    protected function getTokenUrl()
    {
        return 'https://www.linkedin.com/oauth/v2/accessToken';
    }
    
    /**
     * Get the POST fields for the token request.
     *
     * @param  string  $code
     * @return array
     */
    protected function getTokenFields($code)
    {
        return parent::getTokenFields($code) + ['grant_type' => 'authorization_code'];
    }
    
    /**
     * {@inheritdoc}
     */
    protected function getUserByToken($token)
    {
        $basicProfile = $this->getBasicProfile($token);
        $emailAddress = $this->getEmailAddress($token);
    
        return array_merge($basicProfile, $emailAddress);
    }
    
    /**
     * Get the basic profile fields for the user.
     *
     * @param  string  $token
     * @return array
     */
    protected function getBasicProfile($token)
    {
        $url = 'https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))';
    
        $response = $this->getHttpClient()->get($url, [
            'headers' => [
                'Authorization' => 'Bearer '.$token,
                'X-RestLi-Protocol-Version' => '2.0.0',
            ],
        ]);
    
        return (array) json_decode($response->getBody(), true);
    }
    
    /**
     * Get the email address for the user.
     *
     * @param  string  $token
     * @return array
     */
    protected function getEmailAddress($token)
    {
        $url = 'https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))';
    
        $response = $this->getHttpClient()->get($url, [
            'headers' => [
                'Authorization' => 'Bearer '.$token,
                'X-RestLi-Protocol-Version' => '2.0.0',
            ],
        ]);
    
        return (array) Arr::get((array) json_decode($response->getBody(), true), 'elements.0.handle~');
    }
    
    /**
     * {@inheritdoc}
     */
    protected function mapUserToObject(array $user)
    {
        $preferredLocale = Arr::get($user, 'firstName.preferredLocale.language').'_'.Arr::get($user, 'firstName.preferredLocale.country');
        $firstName = Arr::get($user, 'firstName.localized.'.$preferredLocale);
        $lastName = Arr::get($user, 'lastName.localized.'.$preferredLocale);
    
        $images = (array) Arr::get($user, 'profilePicture.displayImage~.elements', []);
        $avatar = Arr::first(Arr::where($images, function ($image) {
            return $image['data']['com.linkedin.digitalmedia.mediaartifact.StillImage']['storageSize']['width'] === 100;
        }));
        $originalAvatar = Arr::first(Arr::where($images, function ($image) {
            return $image['data']['com.linkedin.digitalmedia.mediaartifact.StillImage']['storageSize']['width'] === 800;
        }));
    
        return (new User)->setRaw($user)->map([
            'id' => $user['id'],
            'nickname' => null,
            'name' => $firstName.' '.$lastName,
            'first_name' => $firstName,
            'last_name' => $lastName,
            'email' => Arr::get($user, 'emailAddress'),
            'avatar' => Arr::get($avatar, 'identifiers.0.identifier'),
            'avatar_original' => Arr::get($originalAvatar, 'identifiers.0.identifier'),
        ]);
    }
    

    }

    【讨论】:

    • 当我更换它时得到这个错误。 preg_replace():参数不匹配,pattern是字符串而replacement是数组
    • 根据您的用户表返回值。根据您的数据库要求更改参数
    猜你喜欢
    • 2020-03-29
    • 2017-11-14
    • 2015-08-16
    • 2016-07-11
    • 2018-03-11
    • 2018-01-02
    • 2017-12-02
    • 2020-11-10
    • 2020-06-13
    相关资源
    最近更新 更多