2015-03-12 3 views

ответ

4

Глядя на исходный код Socialite https://github.com/laravel/socialite/blob/2.0/src/Two/FacebookProvider.php

Вы можете увидеть в строке 91, что URL для аватара добавляет статический ?type=normal в конце. График API документация Facebook говорит, что вы можете запросить размер аватара с помощью ENUM или пользовательские width/height, так что вы можете изменить строку 91 и добавьте к ENUM или пользовательские width/height как ?type=large

Более подробную информацию можно найти в документации по графике API Facebook.

Однако, это только для драйвера Facebook, поэтому вам придется копать аналогичным образом для других поставщиков. Если их API не допускают такой свободы, как в случае с Facebook, вам нужно будет сделать с возвращенным аватаром.

Обновлено 12 марта 2015

Не настроить исходный пакет Socialite, раскошелиться хранилище, а затем внести изменения. Затем вы можете подключить ваш разветвленный репозиторий в свой проект, а также отправить запрос на перенос оригинальному автору в случае, если он считает, что он имеет функциональность, которую вы реализовали. Кроме того, ваш разветвленный репозиторий не будет обновляться/поддерживаться, как в случае с исходным пакетом. Если вы решите обновиться до нового пакета, ваши изменения будут потеряны.

+0

Хотя ваш ответ правильный (и в этом случае только решение), следует иметь в виду, что обычно плохо менять пакеты напрямую, потому что любое обновление пакета перезапишут ваши изменения. – Bogdan

+0

@Bogdan Спасибо, что указали это, я обновил свой ответ. –

0

Просто добавьте ваш нужный размер после того, как тип = нормальный, как это:

graph.facebook.com/v2.2/{user}/picture?type=normal & ширина = 76 & высота = 76

это будет переопределить тип = нормальный

0

Для использования оригинального размера аватаров от Facebook и Google:

public function handleProviderCallback($provider){ 
$userData = Socialite::driver($provider)->user(); 
$user = new User; 
... 

Google:

$user->avatar = preg_replace('/\?sz=[\d]*$/', '', $userData->avatar); 

Facebook:

$user->avatar = $userData->avatar_original; 
1

Fix для малого Аватар Facebook/Google/Twitter Фото

Я создал этот вспомогательный метод в моем AuthController

public function getBigAvatar($user, $provider) 
{ 
    return ($provider == "google") ? $user->getAvatar()."0" : $user->avatar_original; 
} 

И ЭТО КАК Я СА LL IT:

$user = Socialite::driver($provider)->user(); 
$userPhoto = $this->getBigAvatar($user, $provider); 

Так просто в случае его Google, ну просто добавьте 0 до конца URL и хорошо получить 500px аватар.И щебет и Facebook, Провайдеры уже предлагает avatar_original атрибут, как показано в

FacebookProvider.php

protected function mapUserToObject(array $user) 
{ 
    $avatarUrl = $this->graphUrl.'/'.$this->version.'/'.$user['id'].'/picture'; 

    return (new User)->setRaw($user)->map([ 
     'id' => $user['id'], 'nickname' => null, 'name' => isset($user['name']) ? $user['name'] : null, 
     'email' => isset($user['email']) ? $user['email'] : null, 'avatar' => $avatarUrl.'?type=normal', 
     'avatar_original' => $avatarUrl.'?width=1920', 
    ]); 
} 

TwitterProvider.php

return $instance->map([ 
     'id' => $user->uid, 'nickname' => $user->nickname, 
     'name' => $user->name, 'email' => $user->email, 'avatar' => $user->imageUrl, 
     'avatar_original' => str_replace('_normal', '', $user->imageUrl), 
    ]); 

Поскольку Google не отображает этот , И получает изображение по умолчанию 50px, мы просто меняем его на 500 пикселей с отлично подходит для аватара.

РАБОТАЕМ СОВЕРШЕННО ДЛЯ МЕНЯ, ПОЗВОЛЯЙТЕ МНЕ ЗНАТЬ, ЕСЛИ ЭТО ПОМОГАЕТ ВАМ!

0

Вот код, который я придумал

if($file = $user->getAvatar()) { 
     if ($provider == 'google') { 
      $file = str_replace('?sz=50', '', $file); 
     } elseif ($provider == 'twitter') { 
      $file = str_replace('_normal', '', $file); 
     } elseif ($provider == 'facebook') { 
      $file = str_replace('type=normal', 'type=large', $file); 
     } 
    } 

Happy кодирования всех :)

Это в основном только замена или часть аватара URL изображения так, что бы вернуть большую.

getAvatar() функция возвращает URL изображения, так что я сохранил его в переменных $ файла

И в зависимости от структуры URL провайдера отличается, поэтому для каждого поставщика вам необходимо изменить URL-строку изображения соответственно

Google удалить? зг = 50 'из URL изображения строки

Twitter удалить «_nor тип ТЗА»из URL-адреса строки изображения

Facebook заменить„= нормальный“с„типа = большой“в URL изображения строки

+0

Пожалуйста, объясните код, не просто покажите его.Это поднимет значение ответа –

+0

извините, здесь вы – spwin

0

здесь еще один простой способ для аватара

public function redirectToProvider($provider) 
{ 
    return Socialite::driver($provider)->redirect(); 
} 

public function handleProviderCallback($provider) 
{ 
    $user = Socialite::driver($provider)->user(); 

    // dd($user); 

    if ($user) { 
     $authUser = $this->findOrCreateUser($user, $provider); 
     Auth::login($authUser, true); 

     return redirect()->route('home'); 
    } 

    return 'something went wrong'; 
} 

private function findOrCreateUser($user, $provider) 
{ 
    $found = User::where('provider_id', $user->id)->first(); 

    if ($found) { 
     return $found; 
    } 

    // so the default is G+, change according to your needs 
    $avatar = str_replace('?sz=50', '', $user->avatar); 

    if ($provider == 'facebook' || $provider == 'twitter') { 
     $avatar = $user->avatar_original; 
    } 

    return User::create([ 
     'username'  => $user->name, 
     'email'   => $user->email, 
     'avatar'   => $avatar, 
     'provider'  => $provider, 
     'provider_id'  => $user->id, 
    ]); 
} 

это way u не меняет код ур много и проще для обслуживания,

однако по какой-то причине авария facebook не появляется в моем приложении, plz, если кто-то может помочь, я бы очень признателен ,

вот моя текущая ссылка фба аватара я получить

https://graph.facebook.com/v2.6/xxxxxxxxxxx/picture?width=1920

и вид

<img class="user-avatar" src="{{ $user->avatar }}" alt="user avatar">

Смежные вопросы