لاراول سوسیالیت
معرفی
علاوه بر احراز هویت معمولی و مبتنی بر فرم، لاراول همچنین یک راه ساده و راحت برای احراز هویت با ارائه دهندگان OAuth با استفاده از Laravel Socialite ارائه می دهد . Socialite در حال حاضر از احراز هویت از طریق Facebook، Twitter، LinkedIn، Google، GitHub، GitLab، Bitbucket و Slack پشتیبانی می کند.
آداپتورهای پلتفرم های دیگر از طریق وب سایت ارائه دهندگان اجتماعی مبتنی بر جامعه در دسترس هستند .
نصب و راه اندازی
برای شروع کار با 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-openid
google
github
gitlab
bitbucket
slack
'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();
Slack Bot Scopes
Slack's API انواع مختلفی از نشانههای دسترسی را ارائه میکند که هر کدام مجموعهای از محدودههای مجوز خاص خود را دارند . Socialite با هر دو نوع توکن دسترسی Slack زیر سازگار است:
-
ربات (پیشوند با
xoxb-
) -
کاربر (پیشوند با
xoxp-
)
به طور پیشفرض،
slack
درایور یک توکن تولید میکند
user
و با فراخوانی روش درایور،
user
جزئیات کاربر را برمیگرداند.
توکن های ربات در درجه اول مفید هستند اگر برنامه شما اعلان هایی را به فضاهای کاری خارجی Slack که متعلق به کاربران برنامه شما هستند ارسال کند. برای ایجاد یک توکن ربات،
asBotUser
قبل از هدایت کاربر به Slack برای احراز هویت، روش را فراخوانی کنید:
return Socialite::driver('slack') ->asBotUser() ->setScopes(['chat:write', 'chat:write.public', 'chat:write.customize']) ->redirect();
علاوه بر این، باید
asBotUser
قبل از فراخوانی متد،
user
پس از اینکه Slack کاربر را پس از احراز هویت به برنامه شما هدایت کرد، متد را فراخوانی کنید:
$user = Socialite::driver('slack')->asBotUser()->user();
هنگام تولید یک توکن ربات، روش همچنان یک
نمونه را
user
برمی گرداند .
Laravel\Socialite\Two\User
با این حال، فقط
token
ملک هیدراته می شود. این نشانه ممکن است به منظور
ارسال اعلانها به فضاهای کاری Slack کاربر تأیید شده
ذخیره شود .
پارامترهای اختیاری
تعدادی از ارائه دهندگان 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 در دسترس نیست.