laravel passport چیست؟
این پکیج یک توکن در اختیار شما قرار می دهد که در مسیر تعیین شده مثل api، شما برای استفاده نیازمند این توکن خواهید بود و این توکن در واقع شناسه منحصر به فردی برای شما می باشد که احراز هویت شما در برنامه می باشد این توکن را می توانید در درخواست های خود در header قرار دهید.
نصب laravel passport
برای نصب این پکیج مراحل ذیل را مرحله به مرحله انجام می دهیم و در پایان یک مثال از نحوه استفاده از لاراول پاسپورت را خواهیم داشت. ابتدا کد زیر را برای دانلود این پکیج در مسیر پروژه مورد نظر اجرا می کنیم
composer require laravel/passport
سپس جداول مورد نیاز این پکیج را با دستور ذیل ایجاد می کنیم
php artisan migrate
در صورت نیاز برای سفارشی کردن جداول این پکیج قبل از اجرای دستور بالا دستور ذیل را اجرا کنید و نیازهای خود را در migration مربوطه ایجاد کنید سپس دستور بالا را اجرا کنید.
php artisan vendor:publish --tag=passport-migrations
سپس برای نهایی سازی نصب و ایجاد کلیدهای دسترسی امن دستور ذیل را اجرا می کنیم
php artisan passport:install
سپس در مدل User از Trait (کلاس با ارث بری چندگانه در php) استفاده و فراخوانی می کنیم در قسمت بالا Laravel\Passport\HasApiTokens را use کنید سپس در داخل مدل HasApiTokens را فراخوانی کنید. که مدل User به شکل زیر خواهد بود
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable; }
در ادامه Passport::routes را به متد boot در فایل AuthServiceProvider اضافه می کنیدمسیر این فایل app\Providers\AuthServiceProvider.php می باشد این متد routeهای لازم برای صدور توکنهای دسترسی، لغو توکنهای دسترسی، کلاینتها و توکنهای دسترسی شخصی را ثبت میکند:
این فایل به صورت ذیل خواهد بود
namespace App\Providers;
use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider {
protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', ];
public function boot() {
$this->registerPolicies();
Passport::routes();
}
}
برای پایان نصب و راه اندازی نیز در فایل config/auth.php تنظیمات نوع driver برای api را به passport تغییر می دهیم احراز هویت درخواست های خارج از لاراول از TokenGuard استفاده خواهد کرد.
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
], ],
تا اینجا این پکیج به صورت کامل نصب شده است و می توانید از آن به صورت دلخواه خود استفاده کنید. ما یک مثال ساده لاگین برای api خود ایجاد می کنیم تا طرز صحیح استفاده از این پکیج را به شما بیاموزیم
کنترلر User را ایجاد میکنیم
php artisan make:controller API\UserController
کد این کنترلر را به صورت زیر می نویسیم ما می خواهیم با موبایل و پسورد کاربر لاگین کند.
namespace App\Http\Controllers\API;
use App\Client;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;
use Validator;
class UserController extends Controller
{
public function login(Request $request){
$request->validate([
'mobile' => 'required|digits:11',
'password' => 'required|string'
]);
$credentials = request(['mobile', 'password']);
if(!Auth::attempt($credentials)){
return response()->json([ 'message' => 'Unauthorized' ], 401);
}
$user = $request->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->token;
$token->save();
return response()->json([
'access_token' => $tokenResult->accessToken,
'token_type' => 'Bearer',
'expires_at' => Carbon::parse( $tokenResult->token->expires_at )->toDateTimeString()
]);
}
public function user(Request $request) { return response()->json($request->user()); }
public function logout(Request $request) {
$request->user()->token()->revoke();
return response()->json([ 'message' => 'Successfully logged out' ]);
}
}
آموزش لاراول (laravel) دوره جامع پروژه محور ساخت فروشگاه اینترنتی
بعد از ساخت کنترلر، مسیر (route) این مسیرها را ایجاد می کنیم
use Illuminate\Http\Request;
Route::group([ 'prefix' => 'auth' ], function () {
Route::post('login', 'AuthController@login');
Route::group([ 'middleware' => 'auth:api' ], function() {
Route::get('logout', 'AuthController@logout');
Route::get('user', 'AuthController@user');
});
});
شما می توانید با برنامه postman این مثال را تست کنید.