From b4c1210b5ae8cac7626b0aa304cb5141c5297d4b Mon Sep 17 00:00:00 2001 From: Fady Mondy Date: Sat, 30 Mar 2024 04:58:46 +0200 Subject: [PATCH] fix login with social networks --- .../App/Http/Controllers/AuthController.php | 183 ++++++++++-------- Modules/CircleXO/routes/web.php | 2 +- 2 files changed, 98 insertions(+), 87 deletions(-) diff --git a/Modules/CircleXO/App/Http/Controllers/AuthController.php b/Modules/CircleXO/App/Http/Controllers/AuthController.php index e273fe6..a5efa97 100644 --- a/Modules/CircleXO/App/Http/Controllers/AuthController.php +++ b/Modules/CircleXO/App/Http/Controllers/AuthController.php @@ -21,72 +21,115 @@ class AuthController extends Controller public function provider($provider) { - return Socialite::driver($provider)->redirect(); + try { + return Socialite::driver($provider)->redirect(); + }catch (\Exception $exception){ + Toast::danger('Something went wrong!')->autoDismiss(2); + return redirect()->route('account.login'); + } } public function callback($provider) { - $providerHasToken = config('services.'.$provider.'.client_token'); - if($providerHasToken){ - $socialUser = Socialite::driver($provider)->userFromToken($providerHasToken); - } - else { - $socialUser = Socialite::driver($provider)->user(); - } - - if(auth('accounts')->user()){ - AccountsMeta::where('key', $provider . '_id')->where('value', $socialUser->id)->delete(); - - $account = auth('accounts')->user(); - $account->meta($provider . '_id', $socialUser->id); - if ($socialUser->token) { - $account->meta($provider . '_token', $socialUser->token); + try { + $providerHasToken = config('services.'.$provider.'.client_token'); + if($providerHasToken){ + $socialUser = Socialite::driver($provider)->userFromToken($providerHasToken); } - if ($socialUser->refreshToken) { - $account->meta($provider . '_refresh_token', $socialUser->refreshToken); + else { + $socialUser = Socialite::driver($provider)->user(); } - if (isset($socialUser->attributes['avatar']) && !$account->getMedia('avatar')->first()) { - $account->addMediaFromUrl($socialUser->attributes['avatar'])->toMediaCollection('avatar'); - } + if(auth('accounts')->user()){ + AccountsMeta::where('key', $provider . '_id')->where('value', $socialUser->id)->delete(); - Toast::success('Account connected successfully!')->autoDismiss(2); - return redirect()->route('profile.index'); - } - else { - $findUserByProvider = Account::whereHas('accountsMetas', function ($q) use ($socialUser, $provider){ - $q->where('key', $provider . "_id")->where('value', $socialUser->id); - })->first(); + $account = auth('accounts')->user(); + $account->meta($provider . '_id', $socialUser->id); + if ($socialUser->token) { + $account->meta($provider . '_token', $socialUser->token); + } + if ($socialUser->refreshToken) { + $account->meta($provider . '_refresh_token', $socialUser->refreshToken); + } - if($findUserByProvider){ - if(isset($socialUser->attributes['avatar']) && !$findUserByProvider->getMedia('avatar')->first()){ - $findUserByProvider->addMediaFromUrl($socialUser->attributes['avatar'])->toMediaCollection('avatar'); + if (isset($socialUser->attributes['avatar']) && !$account->getMedia('avatar')->first()) { + $account->addMediaFromUrl($socialUser->attributes['avatar'])->toMediaCollection('avatar'); } - Toast::success('Account connected successfully!')->autoDismiss(2); - auth('accounts')->login($findUserByProvider); + Toast::success('Account connected successfully!')->autoDismiss(2); return redirect()->route('profile.index'); } else { - if($socialUser->email){ - $findUserByEmail = Account::where('email', $socialUser->email)->first(); - if($findUserByEmail){ - $findUserByEmail->meta($provider . '_id', $socialUser->id); - if ($socialUser->token) { - $findUserByEmail->meta($provider . '_token', $socialUser->token); - } - if ($socialUser->refreshToken) { - $findUserByEmail->meta($provider . '_refresh_token', $socialUser->refreshToken); - } - - if (isset($socialUser->attributes['avatar']) && !$findUserByEmail->getMedia('avatar')->first()) { - $findUserByEmail->addMediaFromUrl($socialUser->attributes['avatar'])->toMediaCollection('avatar'); - } + $findUserByProvider = Account::whereHas('accountsMetas', function ($q) use ($socialUser, $provider){ + $q->where('key', $provider . "_id")->where('value', $socialUser->id); + })->first(); - Toast::success('Account connected successfully!')->autoDismiss(2); + if($findUserByProvider){ + if(isset($socialUser->attributes['avatar']) && !$findUserByProvider->getMedia('avatar')->first()){ + $findUserByProvider->addMediaFromUrl($socialUser->attributes['avatar'])->toMediaCollection('avatar'); + } + Toast::success('Account connected successfully!')->autoDismiss(2); - auth('accounts')->login($findUserByEmail); - return redirect()->route('profile.index'); + auth('accounts')->login($findUserByProvider); + return redirect()->route('profile.index'); + } + else { + if($socialUser->email){ + $findUserByEmail = Account::where('email', $socialUser->email)->first(); + if($findUserByEmail){ + $findUserByEmail->meta($provider . '_id', $socialUser->id); + if ($socialUser->token) { + $findUserByEmail->meta($provider . '_token', $socialUser->token); + } + if ($socialUser->refreshToken) { + $findUserByEmail->meta($provider . '_refresh_token', $socialUser->refreshToken); + } + + if (isset($socialUser->attributes['avatar']) && !$findUserByEmail->getMedia('avatar')->first()) { + $findUserByEmail->addMediaFromUrl($socialUser->attributes['avatar'])->toMediaCollection('avatar'); + } + + Toast::success('Account connected successfully!')->autoDismiss(2); + + auth('accounts')->login($findUserByEmail); + return redirect()->route('profile.index'); + } + else { + $account = new Account(); + $account->name = $socialUser->name; + $account->email = $socialUser->email; + if(isset($socialUser->attributes['nickname'])){ + $username = $socialUser->attributes['nickname']; + } + else { + $username = str($socialUser->name)->slug('_'); + } + $checkIfUserNameExists = Account::where('username', "@" . $username)->first(); + if($checkIfUserNameExists){ + $username = $username . rand(1000, 9999); + } + + $account->username = "@" . $username; + $account->is_active = true; + $account->save(); + + $account->meta($provider . '_id', $socialUser->id); + if($socialUser->token){ + $account->meta($provider . '_token', $socialUser->token); + } + if($socialUser->refreshToken){ + $account->meta($provider . '_refresh_token', $socialUser->refreshToken); + } + + if(isset($socialUser->attributes['avatar'])){ + $account->addMediaFromUrl($socialUser->attributes['avatar'])->toMediaCollection('avatar'); + } + + Toast::success('Account connected successfully!')->autoDismiss(2); + + auth('accounts')->login($account); + return redirect()->route('profile.index'); + } } else { $account = new Account(); @@ -120,48 +163,16 @@ public function callback($provider) } Toast::success('Account connected successfully!')->autoDismiss(2); - auth('accounts')->login($account); return redirect()->route('profile.index'); } } - else { - $account = new Account(); - $account->name = $socialUser->name; - $account->email = $socialUser->email; - if(isset($socialUser->attributes['nickname'])){ - $username = $socialUser->attributes['nickname']; - } - else { - $username = str($socialUser->name)->slug('_'); - } - $checkIfUserNameExists = Account::where('username', "@" . $username)->first(); - if($checkIfUserNameExists){ - $username = $username . rand(1000, 9999); - } - - $account->username = "@" . $username; - $account->is_active = true; - $account->save(); - - $account->meta($provider . '_id', $socialUser->id); - if($socialUser->token){ - $account->meta($provider . '_token', $socialUser->token); - } - if($socialUser->refreshToken){ - $account->meta($provider . '_refresh_token', $socialUser->refreshToken); - } - - if(isset($socialUser->attributes['avatar'])){ - $account->addMediaFromUrl($socialUser->attributes['avatar'])->toMediaCollection('avatar'); - } - - Toast::success('Account connected successfully!')->autoDismiss(2); - auth('accounts')->login($account); - return redirect()->route('profile.index'); - } } } + catch (\Exception $exception){ + Toast::danger('Something went wrong!')->autoDismiss(2); + return redirect()->route('account.login'); + } } public function register() diff --git a/Modules/CircleXO/routes/web.php b/Modules/CircleXO/routes/web.php index 6f88d80..4f60d2c 100644 --- a/Modules/CircleXO/routes/web.php +++ b/Modules/CircleXO/routes/web.php @@ -33,7 +33,7 @@ Route::get('/blog', [CircleXOController::class, 'blog'])->name('home.blog'); }); -Route::middleware('web')->group(function (){ +Route::middleware(['web', 'throttle:10'])->group(function (){ Route::get('/login/{provider}', [AuthController::class, 'provider'])->name('provider'); Route::get('/login/{provider}/callback', [AuthController::class, 'callback'])->name('provider.callback'); });