Sanctum api authenticate in laravel

 Step 1: setup database in .env file

DB_DATABASE=test

DB_USERNAME=root

DB_PASSWORD=

--------------------------------------


Step 2:Install Laravel Sanctum.

composer require laravel/sanctum

----------------------------------------


Step 3:Publish the Sanctum configuration and migration files.

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

--------------------------------------------------------------------------------


Step 4:Run your database migrations.

php artisan migrate

------------------------------------


Step 5:Add the Sanctum's middleware.

../app/Http/Kernel.php


use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;


...


    protected $middlewareGroups = [

        ...


        'api' => [

            EnsureFrontendRequestsAreStateful::class,

            'throttle:60,1',

            \Illuminate\Routing\Middleware\SubstituteBindings::class,

        ],

    ];


    ...

],

---------------------------------------------------------------------------


Step 6:To use tokens for User Model.

use Laravel\Sanctum\HasApiTokens;


class User extends Authenticatable

{

    use HasApiTokens, Notifiable;

}

-------------------------------------


Step 7:Let's create the seeder for the User model

php artisan make:seeder UsersTableSeeder

----------------------------------------------------


Step 8:Now let's insert as record (UsersTableSeeder )

use Illuminate\Support\Facades\DB;

use Illuminate\Support\Facades\Hash;

...

...

DB::table('users')->insert([

    'name' => 'John Doe',

    'email' => 'john@doe.com',

    'password' => Hash::make('password')

]);

--------------------------------------------------------


Step 9:To seed users table with user

php artisan db:seed --class=UsersTableSeeder

---------------------------------------------------------


Step 10: create a controller and /login route in the routes/api.php file:

<?php


namespace App\Http\Controllers;


use Illuminate\Http\Request;

use App\Models\User;

use Illuminate\Support\Facades\Hash;

class UserController extends Controller

{

    // 


    function index(Request $request)

    {

        $user= User::where('email', $request->email)->first();

        // print_r($data);

            if (!$user || !Hash::check($request->password, $user->password)) {

                return response([

                    'message' => ['These credentials do not match our records.']

                ], 404);

            }

        

             $token = $user->createToken('my-app-token')->plainTextToken;

        

            $response = [

                'user' => $user,

                'token' => $token

            ];

        

             return response($response, 201);

    }

}


------------------------------------------------------------------------------------


Step 11: Make Details API or any other with secure route


Route::group(['middleware' => 'auth:sanctum'], function(){

    //All secure URL's


    });



Route::post("login",[UserController::class,'index']);

--------------------------------------------------------------


OUTPUT


{

    "user": {

        "id": 1,

        "name": "John Doe",

        "email": "john@doe.com",

        "email_verified_at": null,

        "created_at": null,

        "updated_at": null

    },

    "token": "AbQzDgXa..."

}

---------------------------------- THE END ---------------------------------------


Comments

Popular posts from this blog

My Sql Query ..

Interview question laravel.