في هذا المقال نكمل سلسلة إضافة إمكانية تسجيل الدخول للموقع بإستخدام مواقع التواصل الإجتماعي، فبعد أن تم شرح كيفية تسجيل الدخول بواسطة google و linkedin سيتم في هذا المقال شرح كيفية القيام بذلك بإستخدام github
كما هو الحال في قوقل ولينكد إن، فإنه أيضا في جت هب يجب الحصول على app_id, secret_id.
زيارة الرابط https://github.com/settings/developers وستظهر لدينا الشاشة التالية

في القائمة الجانبية نختار 0Auth Apps ونضغط على Register a new application

نقوم بتعبئة البيانات مثل إسم التطبيق، رابط التطبيق، و Authorization callback URL

بعد الضغط على Register application تظهر لنا شاشة تحتوي على Client ID وبالضغط على Generate a new client secret نحصل على secret id
بالإمكان إختيار شعار للتطبيق. غالبا ما يتم وضع شعار الموقع الذي نعمل علية.

إضافة github driver في ملف service.php
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('GITHUB_REDIRECT')
],في ملف .env نضع قيمة client_id,client_secret_, redirect
GITHUB_CLIENT_ID=9388b4ffb1fcecccb59c GITHUB_CLIENT_SECRET=7903b2dc7b3d99d4b5e28700b5fd8c94cc447b80 GITHUB_REDIRECT=http://127.0.0.1:8000/callback/github
إضافة providers, aliases في ملف config/app.php
'providers' => [ /* * Package Service Providers... */ Laravel\Socialite\SocialiteServiceProvider::class, ]
'aliases' => [ ... 'Socialite' => Laravel\Socialite\Facades\Socialite::class, ]
تعديل ملف users migration وذلك لإضافة حقلي social_id, social_type
php artisan make:migration addSocialToUsers
public function up()
{
Schema::table('users', function ($table) {
$table->string('social_id')->nullable();
$table->string('social_type')->nullable();
});
}تنفيذ migration
php artisan:migrate
التعديل على User Model
protected $fillable = [ 'name', 'email', 'password', 'social_id', 'social_type' ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', 'two_factor_recovery_codes', 'two_factor_secret', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; /** * The accessors to append to the model's array form. * * @var array */ protected $appends = [ 'profile_photo_url', ];
إضافة route في ملف web.php
Route::get('auth/github', [SocialGithubController::class, 'redirectToGithub']);
Route::get('callback/github', [SocialGithubController::class, 'handleCallback']);إنشاء SocialGithubController ووضع الدوال redirectToGithub و handleCallback
php artisan make:controller SocialGithubController
class SocialGithubController extends Controller
{
public function redirectToGithub()
{
return Socialite::driver('github')->redirect();
}
public function handleCallback()
{
try {
$user = Socialite::driver('github')->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'=> 'github',
'password' => encrypt('github123456')
]);
Auth::login($newUser);
return redirect('/home');
}
} catch (Exception $e) {
dd($e->getMessage());
}
}
}إضافة زر login with github إلى صفحة login
<a href="{{ url('auth/github') }}">
<strong>Github Login</strong>
</a> بعد الضغط على زر تسجيل الدخول تظهر لنا هذه الشاشة حيث يتم تطلب صلاحيات الوصول، وبالضغط على Authorize يتم تسجيل دخول المستخدم بشكل سليم.
