Create Rest API with Laravel Passport Authentication

In this blog, we will learn how to setup passport on project and use for api.

In this example, we will work with basic installations.

Now Lets Start.

First create project using command '.

  composer create-project laravel/laravel  projectname
                            



Now enter into project and install passport package using follwing commands.

  
  cd project name
  /**********install package********/
  composer require laravel/passport
                          

Now place service provider in config/app.php file

  config/app.php
'providers' =>[
Laravel\Passport\PassportServiceProvider::class,
],                          

Now run migrations and install passport into project

  
php artisan migrate
php artisan passport:install                          

Make Configuration app/User.php

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(); 
    } 

                          

Make Configuration config/auth.php

  return [
'guards' => [ 
        'web' => [ 
            'driver' => 'session', 
            'provider' => 'users', 
        ], 
        'api' => [ 
            'driver' => 'passport', 
            'provider' => 'users', 
        ], 
    ],
}                          

Create route for api

  
Route::post('login_user', 'API_FOLDER\UserController@login_user');
Route::post('register_user', 'API_FOLDER\UserController@register_user');
Route::group(['middleware' => 'auth:api'], function(){
Route::post('user_details', 'API_FOLDER\UserController@user_details');
});                          

Create controller

namespace App\Http\Controllers\API;
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_user()
    { 
        $arr=[];
        if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){ 
            $user = Auth::user(); 
            $arr['data']['token'] =  $user->createToken('ANYSTRING')-> accessToken; 
            $arr['status']=1;
            $arr['message']='Login Sucessfully';
            
            return response()->json($arr, 200); 
        } 
        else{ 
            $arr['status']=0;
            $arr['message']='Login fails';
            $arr['data']=NULL;
            return response()->json(['error'=>'Unauthorised'], 200); 
        } 
    }

    public function register_user(Request $request) 
    { 
        $arr=[];
        $validator = Validator::make($request->all(), [ 
            'name' => 'required', 
            'email' => 'required|email', 
            'password' => 'required', 
        ]);
      if ($validator->fails()) { 
                  return response()->json(['error'=>'Try again'], 200);            
              }
      $input = $request->all(); 
              $input['password'] = bcrypt($input['password']); 
              $user = User::create($input); 
              $arr['status'] =  1;
              $arr['message'] =  'Success';
              $arr['data']['token'] =  $user->createToken('ANYSTRING')-> accessToken; 
              $arr['data']['name'] =  $user->name;
      return response()->json($arr, 200); 
          }

          public function user_details() 
          { 
              $arr=[];
              $user = Auth::user(); 
              $arr['status']=1;
              $arr['message']='Success';
              $arr['data']=$user;
              return response()->json($arr, 200); 
          } 
      }