Laravel Изображения в социальных сетях Facebook неверны - PullRequest
0 голосов
/ 01 мая 2020

У меня странная проблема, которую я не могу понять. Я использую Laravel Socialite, чтобы разрешить вход в систему с учетной записью Facebook, многие пользователи жалуются, что изображение профиля, отображаемое в их учетной записи, неверно, однако с именем et c все в порядке.

Это не имеет смысла для меня, так как имя и профиль pi c извлекаются непосредственно из 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;
            }    
        }

1 Ответ

1 голос
/ 02 мая 2020

Вместо использования md5 вы можете использовать генератор UUID. Одна из причин этой проблемы, потому что md5 генерирует один и тот же ha sh для одного и того же ввода. например, когда вы передадите md5 (111), он сгенерирует 698d51a19d8a121ce581499d7b701668. так что если для другого пользователя вы сгенерируете тот же ключ ha sh, то будет создан последний профиль изображения, а первый заменит его последним.

Сценарий: Пользователь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
                    ]);

Сценарий: Пользователь2:

$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, сохраненные в их профиле. И в этом случае первый профиль пользователя будет таким же, как второй профиль изображения пользователя.

...