في معظم المواقع والتطبيقات في التي يتم العمل عليها، يطلب العميل أن يتمكن المستخدمين من إنشاء حساب أو تسجيل الدخول من خلال Google, Facebook, Linkedin، في هذه السلسة سيتم شرح كيفية القيام بذلك في إطار العمل لارافيل.
واحده من أفضل الحزم packages التي تمكننا من القيام بذلك هي حزمة socialite
حتى يتم دمج وإضافة إمكانية تسجيل الدخول بإستخدام حساب جوجل، بالبداية لا بد من الذهاب إلى Google Developer Console وإنشاء تطبيق جوجل، وذلك من أجل الحصول على client_id, secret_id. ومن أجل الحصول عليهما يمكن إتباع الخطوات التالية
'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('GOOGLE_REDIRECT') ],
GOOGLE_CLIENT_ID=443090683542-u5frlispjiitvoul6ffdafdafdjvbsora090umko.apps.googleusercontent.com GOOGLE_CLIENT_SECRET=tFcDjY5_90B6kOafdafdafd2dDY7MNA GOOGLE_REDIRECT=http://127.0.0.1:8000/callback/google
حيث إن قيم Google_client_id, google_client_service هي ما حصلنا عليها من خلال جوجل.
composer require laravel/socialite
'providers' => [ /* * Package Service Providers... */ Laravel\Socialite\SocialiteServiceProvider::class, ]
'aliases' => [ ... 'Socialite' => Laravel\Socialite\Facades\Socialite::class, ]
php artisan make:migration addSocialToUsers
$table->string('social_id')->nullable(); $table->string('social_type')->nullable();
protected $fillable = [ 'name', 'email', 'password', 'social_id', 'social_type' ];
protected $hidden = [ 'password', 'remember_token', 'two_factor_recovery_codes', 'two_factor_secret', ];
protected $appends = [ 'profile_photo_url', ];
php artisan migrate
Route::get('auth/google', [GoogleSocialiteController::class, 'redirectToGoogle']); Route::get('callback/google', [GoogleSocialiteController::class, 'handleCallback']);
php artisan make:controller GoogleSocialiteController
class GoogleSocialiteController extends Controller { public function redirectToGoogle() { return Socialite::driver('google')->redirect(); } public function handleCallback() { try { $user = Socialite::driver('google')->user(); $finduser = User::where('social_id', $user->id)->first(); if($finduser){ Auth::login($finduser); return redirect('/home'); }else{ $newUser = User::create([ 'name' => $user->name, 'email' => $user->email, 'social_id'=> $user->id, 'social_type'=> 'google', 'password' => encrypt('my-google') ]); Auth::login($newUser); return redirect('/home'); } } catch (Exception $e) { dd($e->getMessage()); } } }
دالة redirectToGoogle تقوم بتوجيه المستخدم لصفحة google.
دالة handleCallback تقوم بما يلي:
إيجاد المستخدم إن كان موجود في قاعدة البيانات، إن كان البريد الإلكتروني موجود سيتم تسجيل دخول المستخدم، وإن كان غير موجود سيتم إنشاء مستخدم جديد وتسجيل الدخول
<a href="{{ url('auth/google') }}" >Google Login</a>
الأن بعد الضغط على هذا الزر في صفحة تسجيل الدخول أو إنشاء حساب، سيتم تحويلنا لصفحة إدخال البريد الإلكتروني، وبوضع المعلومات سيتم إنشاء حساب إن لم يكن الحساب موجود أو تسجيل الدخول إن كان الحساب موجود