Laravel Socialite Facebook图片不正确

问题描述 投票:0回答:1

我有一个奇怪的问题, 我想不通. 我正在使用Laravel Socialite来允许用Facebook账户登录, 有很多用户抱怨说他们账户上显示的个人资料图片不正确, 但是名字等都很好.

这对我来说是没有意义的,因为名字和个人资料图片是直接从FB上同时提取的.

        public function socialUser(ProviderUser $providerUser)
        {
            $account = SocialFacebookAccount::whereProvider('facebook')->whereProviderUserId($providerUser->getId())->first();

            if ($account) {
                return $account->user;
            } else {

                $account = new SocialFacebookAccount([
                    'provider_user_id' => $providerUser->getId(),
                    'provider' => 'facebook'
                ]);

                $user = User::whereEmail( $providerUser->getId() )->first(); // changed from getEmail to getId as FB doesnt always give an email

                if (!$user) {

                    $profilePicName = md5(rand(1,10000)) . ".jpg";
                    $contents = file_get_contents( $providerUser->avatar_original );

                    Storage::disk('local')->put( 'profiles/' . $profilePicName, $contents );

                    $user = User::create([
                        'email' => $providerUser->getEmail(),
                        'name' => $providerUser->getName(),
                        'profile_path' => $profilePicName
                    ]);

                }
                $account->user()->associate($user);
                $account->save();
                return $user;
            }    
        }
laravel facebook-graph-api laravel-socialite
1个回答
1
投票

而不是使用md5, 你可以使用UUID生成器. 例如,当你传递md5(111)时,它会生成698d51a19d8a121ce581499d7b701668.因此,如果你为不同的用户生成相同的哈希密钥,最新的图像配置文件将占据一个位置,前者将被后者取代。

场景:用户1。

$profilePicName = md5(111) . ".jpg";
$contents = file_get_contents( $providerUser->avatar_original );
Storage::disk('local')->put( 'profiles/' . $profilePicName, $contents );
$user = User::create([
            'email' => $providerUser->getEmail(),
            'name' => $providerUser->getName(),
            'profile_path' => $profilePicName
                    ]);

场景: User2:

$profilePicName = md5(111) . ".jpg";
$contents = file_get_contents( $providerUser->avatar_original );
Storage::disk('local')->put( 'profiles/' . $profilePicName, $contents );
$user = User::create([
            'email' => $providerUser->getEmail(),
            'name' => $providerUser->getName(),
            'profile_path' => $profilePicName
                    ]);

现在,他们都有698d51a19d8a121ce581499d7b701668.jpg 保存在他们的配置文件中。而在这种情况下,第一个用户资料将与第二个用户图片资料相同。

© www.soinside.com 2019 - 2024. All rights reserved.