In this section, we will look at how to install and configure passport authentication in Laravel 9. For this tutorial, we will use rest api, laravel 9 passport, and Thunder Client vs code extensions to check and test api.
Also Read : How to Install Bootstrap in Laravel 9?
Laravel 9 Rest Api Authentication with Passport
- Step 1: Create Laravel Project
- Step 2: Setup Databases
- Step 3: Install & Setup Passport
- Step 4: Create Api Controller & Routes
- Step 5: Setup and Test Api
Create Laravel Project
To create a Laravel project, enter the following command in your terminal.
composer create-project --prefer-dist laravel/laravel laravel-passport
Setup Databases
Now, fill the details in env file.
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=database_user_name
DB_PASSWORD=database_password
Install & Setup Passport
Install Passport via the Composer package manager:
composer require laravel/passport
Migrate database
php artisan migrate
Install passport client secret key
php artisan passport:install
Setup passport HasApiTokens traits in user modal,
app/Models/User.php
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
// use Laravel\Sanctum\HasApiTokens;
use Laravel\Passport\HasApiTokens;
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array<int, string>
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast.
*
* @var array<string, string>
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
Next, you should call the Passport::routes method within the boot method of your App\Providers\AuthServiceProvider. This method will register the routes necessary to issue access tokens and revoke access tokens, clients, and personal access tokens:
app/Providers/AuthServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use Laravel\Passport\Passport;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array<class-string, class-string>
*/
protected $policies = [
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
if (! $this->app->routesAreCached()) {
Passport::routes();
}
}
}
Next, you need to set api driver for passport.
Also Read : How to Install Alpine.js in Laravel 9
config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
],
Create Api Controller & Routes
Run below command to create controller within api folder.
php artisan make:controller Api/AuthController
Also Read : Laravel 9 Shopping Cart Tutorial with Ajax Example
app/Http/Controllers/Api/AuthController.php
<?php
namespace App\Http\Controllers\Api;
use App\Models\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Symfony\Component\HttpFoundation\Response;
class AuthController extends Controller
{
public function login(Request $request)
{
if (auth()->attempt($request->all())) {
return response([
'user' => auth()->user(),
'access_token' => auth()->user()->createToken('authToken')->accessToken
], Response::HTTP_OK);
}
return response([
'message' => 'This User does not exist'
], Response::HTTP_UNAUTHORIZED);
}
public function register(Request $request)
{
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password)
]);
return response($user, Response::HTTP_CREATED);
}
}
routes/api.php
<?php
use App\Http\Controllers\Api\AuthController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::post('login', [AuthController::class, 'login']);
Route::post('register', [AuthController::class, 'register']);
Setup and Test Api
First you need to set header Accept ‘application/json’ and Authorization with Bearer

Testing Api
You can use postman for api testing or use Thunder Client vs code extensions.
http://localhost:8000/api/register
http://localhost:8000/api/login
Also Read : Laravel 9 Multiple Database Connection Tutorial
4 thoughts on “Rest API Authentication with Passport Laravel 9”