Laravel Socialite

من موسوعة حسوب

مقدمة

بالإضافة إلى الاستيثاق النمطي القائم على النموذج، يوفر Laravel أيضًا طريقة بسيطة ومريحة للاستيثاق مع موفري OAuth باستخدام Laravel Socialite، وهو يدعم حاليا الاستيثاق مع Facebook و Twitter و LinkedIn وGoogle و GitHub و Bitbucket.

ملاحظة: المحولات للمنصات الأخرى موجودة في موقع مجتمع Socialite Providers.

التثبيت

استخدم Composer لإضافة الحزمة إلى اعتماديّات مشروعك لبدء استخدام Socialite:

composer require laravel/socialite

الضبط

ستحتاج قبل استخدام Socialite إلى إضافة بيانات اعتماد لخدمات OAuth التي يستخدمها تطبيقك في ملف الضبط config/services.php ويجب استخدام مفتاح Facebook، witter، Linkedin، Google، Github أو Bitbucket بالاعتماد على مقدمي الخدمات التي يتطلبها التطبيق، وهذا مثال على ذلك:

'github' => [
   'client_id' => env('GITHUB_CLIENT_ID'),        // معرّف Github العميل
   'client_secret' => env('GITHUB_CLIENT_SECRET'), // المعرّف السرّي لGitHub العميل  
   'redirect' => 'http://your-callback-url',
],

إذا احتوى خيار redirect على مسار نسبي، فستتحوّل تلقائيًا إلى عنوان URL مؤهل بالكامل.

التوجيه

أنت مستعد الآن لاستيثاق المستخدمين، ستحتاج إلى مسارين (route): أحدها لإعادة توجيه المستخدم إلى موفّر OAuth، والآخر لتلقي رد الاتصال من الموفّر بعد الاستيثاق، وسنصل إلى Socialite باستخدام واجهة Socialite:

<?php

namespace App\Http\Controllers\Auth;

use Socialite;

class LoginController extends Controller
{

   /**
    * إعادة توجيه المستخدم إلى صفحة مصادقة GIthub.
    *
    * @return \Illuminate\Http\Response
    */

   public function redirectToProvider()

   {
       return Socialite::driver('github')->redirect();
   }

   /**
    * الحصول على معلومات المستخدم من Github.
    *
    * @return \Illuminate\Http\Response
    */

   public function handleProviderCallback()

   {
      $user = Socialite::driver('github')->user();
      // $user->token;

   }
}

يهتم تابع redirect بإرسال المستخدم إلى موفّر OAuth، في حين سيقرأ تابع user الطلب الوارد وسيسترد معلومات المستخدم من الموفّر.

وبالطبع، ستحتاج إلى تعريف المسارات إلى توابع وحدات التحكم:

Route::get('login/github', 'Auth\LoginController@redirectToProvider');

Route::get('login/github/callback', 'Auth\LoginController@handleProviderCallback');

معاملات اختياريّة

يدعم عدد من موفري OAuth العوامل الاختياريّة عند طلب إعادة التوجيه، ولتضمين أي معاملات اختياريّة في الطلب، استدع تابع with مع مصفوفة متصلة:

return Socialite::driver('google')

   ->with(['hd' => 'example.com'])

   ->redirect();

عند استخدام تابع with، احرص على عدم تمرير أي كلمات رئيسية محجوزة مثل state أو response_type.

نطاقات الوصول

يمكنك أيضًا إضافة "نطاقات" إضافيّة على الطلب باستخدام تابع scopes قبل إعادة توجيه المستخدم، وسيدمج هذا التابع جميع النطاقات الموجودة مع تلك التي توفرها:

return Socialite::driver('github')

   ->scopes(['read:user', 'public_repo'])
   ->redirect();

يمكنك استبدال جميع النطاقات الموجودة باستخدام التابع setScopes:

return Socialite::driver('github')

   ->setScopes(['read:user', 'public_repo'])
   ->redirect();

الاستيثاق عديم حالة

يمكن استخدام التابع stateless لتعطيل التحقق من حالة الجلسة، ويفيد هذا عند إضافة الاستيثاق الاجتماعي إلى واجهة:

return Socialite::driver('google')->stateless()->user();

استرداد تفاصيل المستخدم

بمجرد حصولك على نسخة من المستخدم، يمكنك الحصول على بعض التفاصيل حول المستخدم:

$user = Socialite::driver('github')->user();

// OAuth موفري

$token = $user->token;
$refreshToken = $user->refreshToken; // غير متوفّر دائمًا
$expiresIn = $user->expiresIn;

// OAuth موفر

$token = $user->token;
$tokenSecret = $user->tokenSecret;

// جميع الموفرين

$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();

استرداد تفاصيل المستخدم من رمز (OAuth2)

إذا كان لديك بالفعل رمز دخول لمستخدم، يمكنك استرداد تفاصيله باستخدام التابع userFromToken:

$user = Socialite::driver('github')->userFromToken($token);

استرداد تفاصيل المستخدم من رمز ورمز سري (OAuth1)

إذا كان لديك بالفعل زوج مميّز من الرمز/الرمز السري لمستخدم، فيمكنك استرداد التفاصيل الخاصة به باستخدام التابع userFromTokenAndSecret:

$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);

مصادر