پکیج احراز هویت مناسب برای لاراول
یکی از مسائل مهمی که باید به اون توجه داشت سیستم احراز هویت در پروژه های لاراولی هست . این موضوع به نوع پروژه بستگی داره که Sanctum یا Passport یا jwt رو انتخاب کنیم ….
خب تفاوت sanctum با passport استفاده پاسپورت از سیستم oauth هست . خب چیه اینه ؟برای مثال با این مکانیزم و با استفاده از حساب های کاربری Google, Facebook, Twitch, Microsoft یا دیگر Third-Partyهای معتبر میتونیم تو توسایت ثبت نام و لاگین کنیم.
به صورت خلاصه و به نظرمن :
اگر به oauth احتیاج ندارید برید سراغ Sanctum with SPA Authentication(or API Tokens) + Mobile Application Authentication هم برای موبایل هم برای spa ها کافیه.
برای نصب sanctum :
composer require laravel/sanctum php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider" php artisan migrate ####################### ####################### ####################### Add to User Model : use Laravel\Sanctum\HasApiTokens; .... class User extends Authenticatable { use HasFactory, Notifiable, HasApiTokens;
در مرحله بعد یک فایل ایجاد میکنیم تا پاسخ های ثابتی رو از روت ها دریافت کنیم :
App\Traits\ApiResponser.php ############################# <?php namespace App\Traits; use Carbon\Carbon; /* |-------------------------------------------------------------------------- | Api Responser Trait |-------------------------------------------------------------------------- | | This trait will be used for any response we sent to clients. | */ trait ApiResponser { /** * Return a success JSON response. * * @param array|string $data * @param string $message * @param int|null $code * @return \Illuminate\Http\JsonResponse */ protected function success($data, string $message = null, int $code = 200) { return response()->json([ 'status' => 'Success', 'message' => $message, 'data' => $data ], $code); } /** * Return an error JSON response. * * @param string $message * @param int $code * @param array|string|null $data * @return \Illuminate\Http\JsonResponse */ protected function error(string $message = null, int $code, $data = null) { return response()->json([ 'status' => 'Error', 'message' => $message, 'data' => $data ], $code); }
و حالا مثالی ازعضویت و لاگین :
<?php namespace App\Http\Controllers; use App\Models\User; use App\Traits\ApiResponser; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; class AuthController extends Controller { use ApiResponser; public function register(Request $request) { $attr = $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|unique:users,email', 'password' => 'required|string|min:6|confirmed' ]); $user = User::create([ 'name' => $attr['name'], 'password' => bcrypt($attr['password']), 'email' => $attr['email'] ]); return $this->success([ 'token' => $user->createToken('API Token')->plainTextToken ]); } public function login(Request $request) { $attr = $request->validate([ 'email' => 'required|string|email|', 'password' => 'required|string|min:6' ]); if (!Auth::attempt($attr)) { return $this->error('Credentials not match', 401); } return $this->success([ 'token' => auth()->user()->createToken('API Token')->plainTextToken ]); } public function logout() { auth()->user()->tokens()->delete(); return [ 'message' => 'Tokens Revoked' ]; } }