لاراول سوسیالیت
معرفی
علاوه بر احراز هویت معمولی و مبتنی بر فرم، لاراول همچنین یک راه ساده و راحت برای احراز هویت با ارائه دهندگان OAuth با استفاده از Laravel Socialite ارائه می دهد . Socialite در حال حاضر از احراز هویت از طریق Facebook، Twitter، LinkedIn، Google، GitHub، GitLab و Bitbucket پشتیبانی می کند.
آداپتورهای پلتفرم های دیگر از طریق وب سایت ارائه دهندگان اجتماعی مبتنی بر جامعه در دسترس هستند .
نصب و راه اندازی
برای شروع کار با Socialite، از مدیر بسته Composer استفاده کنید تا بسته را به وابستگی های پروژه خود اضافه کنید:
composer require laravel/socialite
ارتقاء اجتماعی
هنگام ارتقاء به نسخه اصلی جدید Socialite، مهم است که راهنمای ارتقا را به دقت مرور کنید .
پیکربندی
قبل از استفاده از Socialite، باید اعتبارنامه هایی را برای ارائه دهندگان OAuth که برنامه شما از آنها استفاده می کند، اضافه کنید. معمولاً، این اعتبارنامهها ممکن است با ایجاد یک «برنامه توسعهدهنده» در داشبورد سرویسی که با آن احراز هویت میکنید، بازیابی شوند.
این اعتبارنامه ها باید در فایل پیکربندی
برنامه شما قرار داده شوند و
بسته به ارائه دهندگانی که برنامه شما به آن نیاز دارد،
باید
config/services.php
از کلید
(OAuth 1.0)،
facebook
(
OAuth 2.0)، (OAuth 2.0 )
،،،،
یا :
twitter
twitter-oauth-2
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::updateOrCreate([ 'github_id' => $githubUser->id, ], [ 'name' => $githubUser->name, 'email' => $githubUser->email, '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();
احراز هویت بدون تابعیت برای درایور Twitter OAuth 1.0 در دسترس نیست.