Now you can provide your feedback to our articles!

Create authenticated API in Laravel with Passport

Last updated : Jul 04, 2021

Create authenticated API in Laravel with Passport



In this Vikrama Tech article you will get to how to create authenticated API in Laravel with Passport. Laravel API is the most easy to create and is very efficient. Laravel Passport is a tool offered by Laravel which makes this process fluid and swift.

Laravel Passport: why are we building api only with Passport. Actually there is also a manual method of creating api in Laravel that is by creating tokens for each user and managing them for each user, Under the hood Laravel's Passport utlity also does the same but in an automated and abstracted way. In steps further you will get to know how. So it's upto the programmer that he/she wants to use token basd system or Laravel's Passport utility. For more information on Laravel's Passport, you can browse https://laravel.com/docs/7.x/passport , the Laravel's official documentation.

Let's get started:

  1. Open up a terminal and make sure Laravel and Composer is installed on your system and added into the environment variables.

  2. Type laravel new laravel-api and this command will create a fresh Laravel project on your disk.

  3. Then type in composer require laravel/passport this command will download the official Passport package from Composer Package Manager.

  4. Then open up your freshly created project in any IDE of your choice (Atom/Sublime/VS Code/Notepad).

  5. Head upto .env file open this file, and search for DB_DATABASE and type in your database name to the right side of equals sign.

  6. Then return to terminal and type in command php artisan migrate this command will publish all the database tables including Passport tables to your Mysql database.

  7. Then type php artisan passport:install this command will create the encryption keys needed to generate secure access tokens.

  8. Open app/User.php file and code:

    <?php
    namespace App;
    use Illuminate\Contracts\Auth\MustVerifyEmail;
    use Illuminate\Foundation\Auth\User as Authenticatable;
    use Illuminate\Notifications\Notifiable;
    use Laravel\Passport\HasApiTokens;
    class User extends Authenticatable {
     use Notifiable,HasApiTokens;
     protected $fillable = [
            'name', 'email', 'password',
     ];
     protected $hidden = [
            'password', 'remember_token',
     ];
     protected $casts = [
            'email_verified_at' => 'datetime',
     ];
    }

  9. Open app/Providers/AuthServiceProvider.php file and code:

    <?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
    
    {
    
        protected $policies = [
    
            // 'App\Model' => 'App\Policies\ModelPolicy',
    
        ];
    
        public function boot()
    
        {
    
            $this->registerPolicies();
    
            Passport::routes();
    
        }
    
    }

  10. Then open config/auth.php and find 'guards' => and under this you will get 'api' => and under this change 'driver' to 'passport'.


  11. Then open routes/api.php and code:

    <?php
    use Illuminate\Http\Request;
    
    use Illuminate\Support\Facades\Route;
    
    Route::post('login','[email protected]');
    
    Route::post('register','[email protected]');
    
    Route::middleware('auth:api')->post('getuser','[email protected]_user');
  12. Return to terminal and type php artisan make:controller AuthController this command will create controller file to handle requests such as login and register.


  13. Go to app/Http/Controllers/AuthController.php and code:

           <?php
           namespace App\Http\Controllers;
           
           use Illuminate\Http\Request;
           
           use Illuminate\Support\Facades\Auth;
           
           use App\User;
           
           class AuthController extends Controller {
           
               public function register(Request $request){
           
                   $request->validate([
           
                       'name' => 'required|string',
           
                       'email' => 'required|string|email|unique:users',
           
                       'password' => 'required|string|confirmed'
           
                   ]);
           
                   $user = new User([
           
                       'name' => $request->name,
           
                       'email' => $request->email,
           
                       'password' => bcrypt($request->password)
           
                   ]);
           
                   $user->save();
           
                   return response()->json([
           
                       'message' => 'Successfully created user!'
           
                   ], 201);
           
               }
           
               public function login(Request $request){
           
                   $request->validate([
           
                       'email' => 'required|string|email',
           
                       'password' => 'required|string'
           
                   ]);
           
                   $credentials = request(['email', 'password']);
           
                   if(!Auth::attempt($credentials))
           
                       return response()->json([
           
                           'message' => 'Unauthorized'
           
                       ], 401);
           
                   $user = $request->user();
           
                   $tokenResult = $user->createToken('token');
           
                   $token = $tokenResult->token;
           
                   $token->save();
           
                   return response()->json([
           
                       'access_token' => $tokenResult->accessToken,
           
                       'token_type' => 'Bearer'
           
                   ]);
           
               }
           
               public function get_user(Request $request){
           
                   return response()->json($request->user());
           
               }
           
           }
    
    

  14. That's it for coding. Now it's time to test the api.

    • First go to Postman utility and if you do not have it then download it from https://www.postman.com/downloads/ and now open it.


    • Now in the url bar type http://localhost:3000/api/register and in the params write name, email, password and password_confirmation and their respective values.


    • For login type http://localhost:3000/api/login and in params type email and password and their respective values and press return key and you will get your access token.



How video streaming works on t...

Read more

Setup react and express on sam...

Read more

How neurons in brain function

Read more

How to create custom router in...

Read more

Run C++ as CGI script in web b...

Read more

Real time chat application usi...

Read more

How to setup lemp stack in ubu...

Read more

How to secure phpmyadmin in Ub...

Read more

How to create real time notifi...

Read more

How to create simple api in no...

Read more

Task scheduling with cron job ...

Read more

How to use modules in Javascri...

Read more

Create a multi language(lingua...

Read more

Create food ordering app - Foo...

Read more

Linear Regression in machine l...

Read more

Create simple web application ...

Read more

Why algorithms can drive the i...

Read more

Why Javascript frameworks are ...

Read more

Create simple and static websi...

Read more

Setup Pusher app

Read more

Laravel Installation and setti...

Read more

Realtime chat application in L...

Read more

Working of neurons (the easy w...

Read more

Progressive web app

Read more

Sign in for comment. Sign in