Я сталкиваюсь с проблемой, я вхожу в социальные сети, и все работает отлично, но моя проблема с Аватарами. При входе в систему я получаю все данные, включая аватар, но этот аватар сохраняется в моей базе данных с исходным URL-адресом социальной сети, вместо этого я хочу сохранить его с моим URL-адресом.
Другими словами, я сохраняю изображения профиля, используя временные метки и оригинальное расширение файла в Laravel
Это мой метод обратного вызова провайдера в контроллере
public function handleProviderCallback(Request $request, $provider)
{
try
{
$socialUser = Socialite::driver($provider)->user();
}
catch(\Exception $e)
{
return redirect('/');
}
//Check if we have logged on Social Provider
$socialProvider = SocialProvider::where('provider_id', $socialUser->getId())->first();
if (!$socialProvider)
{
//Create a new user and provider
$user = new User;
$user->name = $socialUser->getName();
$user->profilepic = $socialUser->getAvatar();
$user->email = $socialUser->getEmail();
if($request->hasFile('avatar')){
$profilepic = $request->file('avatar');
$filename = time() . '.' . $profilepic->getClientOriginalExtension();
Image::make($profilepic)->resize(300, 300)->save( public_path('/uploads/avatars/' . $filename ) );
$user->profilepic = $filename;
}
$user->save();
// $user = User::firstOrCreate([
// 'name' => $socialUser->getName(),
// 'profilepic' => $socialUser->getAvatar(),
// 'email' => $socialUser->getEmail()
// ]);
$user->socialProviders()->create(
['provider_id' => $socialUser->getId(), 'provider' => $provider]
);
Session::flash('success', 'Tu cuenta ha sido enlazada correctamente, sin embargo, ahora debes crear una contraseña. Crea tu contraseña ahora.');
$user->save();
auth()->login($user);
return redirect('account-complete');
}
else
$user = $socialProvider->user;
auth()->login($user);
return back();
}
Я получаю этот URL с Facebook:
https://graph.facebook.com/v2.10/10155364486426042/picture?type=normal
Вот как я хочу, чтобы это было
http://localhost:8000/uploads/avatars/1519702861.jpg
заранее спасибо
Вы можете сделать это так:
if ($socialUser->getAvatar()) {
$filename = "uploads/avatar/".time().".jpg";
// The filename to save in the database.
file_put_contents(
$filename,
file_get_contents($socialUsr->getAvatar())
);
}
Выше метод будет работать, учитывая, что каталог назначения доступен для записи по php.
Надеюсь это поможет.
Других решений пока нет …