نسخه:

لاراول سوسیالیت

معرفی

علاوه بر احراز هویت معمولی و مبتنی بر فرم، لاراول همچنین یک راه ساده و راحت برای احراز هویت با ارائه دهندگان OAuth با استفاده از Laravel Socialite ارائه می دهد . Socialite در حال حاضر از احراز هویت با Facebook، Twitter، LinkedIn، Google، GitHub، GitLab و Bitbucket پشتیبانی می کند.

آداپتورهای دیگر پلتفرم‌ها در وب‌سایت Socialite Providers فهرست شده‌اند .

نصب و راه اندازی

برای شروع کار با Socialite، از مدیر بسته Composer استفاده کنید تا بسته را به وابستگی های پروژه خود اضافه کنید:

composer require laravel/socialite

ارتقاء Socialite

هنگام ارتقاء به نسخه اصلی جدید Socialite، مهم است که راهنمای ارتقا را به دقت مرور کنید .

پیکربندی

قبل از استفاده از Socialite، باید اعتبارنامه هایی را برای ارائه دهندگان OAuth که برنامه شما از آنها استفاده می کند، اضافه کنید. این اعتبارنامه ها باید در فایل پیکربندی برنامه شما قرار داده شوند و بسته به ارائه دهندگان مورد نیاز برنامه شما، config/services.php باید از کلید facebook ، twitter , linkedin , google , github , gitlab یا , استفاده کنند: bitbucket

'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => 'http://example.com/callback-url',
],

اگر redirect گزینه حاوی یک مسیر نسبی باشد، به طور خودکار به یک URL کاملا واجد شرایط حل می شود.

احراز هویت

مسیریابی

برای احراز هویت کاربران با استفاده از ارائه‌دهنده OAuth، به دو مسیر نیاز دارید: یکی برای هدایت کاربر به ارائه‌دهنده OAuth، و دیگری برای دریافت پاسخ تماس از ارائه‌دهنده پس از احراز هویت. کنترلر مثال زیر اجرای هر دو مسیر را نشان می دهد:

use Laravel\Socialite\Facades\Socialite;
 
Route::get('/auth/redirect', function () {
return Socialite::driver('github')->redirect();
});
 
Route::get('/auth/callback', function () {
$user = Socialite::driver('github')->user();
 
// $user->token
});

روش redirect ارائه شده توسط Socialite نما از هدایت مجدد کاربر به ارائه دهنده OAuth مراقبت می کند، در حالی که این user روش درخواست دریافتی را می خواند و پس از احراز هویت، اطلاعات کاربر را از ارائه دهنده بازیابی می کند.

احراز هویت و ذخیره سازی

هنگامی که کاربر از ارائه دهنده OAuth بازیابی شد، می توانید تعیین کنید که آیا کاربر در پایگاه داده برنامه شما وجود دارد یا خیر و کاربر را احراز هویت کنید . اگر کاربر در پایگاه داده برنامه شما وجود نداشته باشد، معمولاً یک رکورد جدید در پایگاه داده خود برای نشان دادن کاربر ایجاد می کنید:

use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;
 
Route::get('/auth/callback', function () {
$githubUser = Socialite::driver('github')->user();
 
$user = User::where('github_id', $githubUser->id)->first();
 
if ($user) {
$user->update([
'github_token' => $githubUser->token,
'github_refresh_token' => $githubUser->refreshToken,
]);
} else {
$user = User::create([
'name' => $githubUser->name,
'email' => $githubUser->email,
'github_id' => $githubUser->id,
'github_token' => $githubUser->token,
'github_refresh_token' => $githubUser->refreshToken,
]);
}
 
Auth::login($user);
 
return redirect('/dashboard');
});

برای اطلاعات بیشتر در مورد اطلاعات کاربری که از ارائه دهندگان خاص OAuth در دسترس است، لطفاً به اسناد مربوط به بازیابی جزئیات کاربر مراجعه کنید .

محدوده های دسترسی

قبل از تغییر مسیر کاربر، می‌توانید با استفاده از scopes روش، «محدوده‌های» اضافی به درخواست احراز هویت اضافه کنید. این روش تمام حوزه‌های موجود را با حوزه‌هایی که شما ارائه می‌کنید ادغام می‌کند:

use Laravel\Socialite\Facades\Socialite;
 
return Socialite::driver('github')
->scopes(['read:user', 'public_repo'])
->redirect();

می‌توانید با استفاده از روش زیر، تمام محدوده‌های موجود در درخواست احراز هویت را بازنویسی کنید setScopes :

return Socialite::driver('github')
->setScopes(['read:user', 'public_repo'])
->redirect();

پارامترهای اختیاری

تعدادی از ارائه دهندگان OAuth از پارامترهای اختیاری در درخواست تغییر مسیر پشتیبانی می کنند. برای گنجاندن هر پارامتر اختیاری در درخواست، with متد را با یک آرایه انجمنی فراخوانی کنید:

use Laravel\Socialite\Facades\Socialite;
 
return Socialite::driver('google')
->with(['hd' => 'example.com'])
->redirect();

هنگام استفاده از with روش، مراقب باشید که هیچ کلمه کلیدی رزرو شده مانند state یا را ارسال نکنید response_type .

بازیابی اطلاعات کاربر

پس از اینکه کاربر به مسیر بازگشت به تماس احراز هویت شما هدایت شد، می توانید جزئیات کاربر را با استفاده از user روش Socialite بازیابی کنید. شی کاربر که توسط user متد برگردانده می شود، ویژگی ها و روش های مختلفی را ارائه می دهد که می توانید از آنها برای ذخیره اطلاعات کاربر در پایگاه داده خود استفاده کنید. بسته به اینکه ارائه دهنده OAuth که با آن احراز هویت می کنید از OAuth 1.0 یا OAuth 2.0 پشتیبانی می کند، ممکن است ویژگی ها و روش های مختلفی در دسترس باشد:

use Laravel\Socialite\Facades\Socialite;
 
Route::get('/auth/callback', function () {
$user = Socialite::driver('github')->user();
 
// OAuth 2.0 providers...
$token = $user->token;
$refreshToken = $user->refreshToken;
$expiresIn = $user->expiresIn;
 
// OAuth 1.0 providers...
$token = $user->token;
$tokenSecret = $user->tokenSecret;
 
// All providers...
$user->getId();
$user->getNickname();
$user->getName();
$user->getEmail();
$user->getAvatar();
});

بازیابی اطلاعات کاربر از یک توکن (OAuth2)

اگر از قبل یک نشانه دسترسی معتبر برای یک کاربر دارید، می‌توانید با استفاده از userFromToken روش Socialite، جزئیات او را بازیابی کنید:

use Laravel\Socialite\Facades\Socialite;
 
$user = Socialite::driver('github')->userFromToken($token);

بازیابی اطلاعات کاربر از یک رمز و راز (OAuth1)

اگر از قبل یک رمز و رمز معتبر برای یک کاربر دارید، می‌توانید با استفاده از userFromTokenAndSecret روش Socialite جزئیات او را بازیابی کنید:

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

احراز هویت بدون تابعیت

این stateless روش ممکن است برای غیرفعال کردن تأیید وضعیت جلسه استفاده شود. این هنگام افزودن احراز هویت اجتماعی به یک API مفید است:

use Laravel\Socialite\Facades\Socialite;
 
return Socialite::driver('google')->stateless()->user();

احراز هویت بدون حالت برای درایور توییتر، که از OAuth 1.0 برای احراز هویت استفاده می کند، در دسترس نیست.