نسخه:

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

معرفی

علاوه بر احراز هویت معمولی و مبتنی بر فرم، لاراول همچنین یک راه ساده و راحت برای احراز هویت با ارائه دهندگان 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 در دسترس نیست.