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);