Mohamed Atef
23 Apr 2022
Laravel
Hello everyone, Welcome to Web-Brackets.com, in this article I am going to show you How to create Laravel Authentication API in few steps
You can install Laravel passport using this command below, from my vision Laravel passport is the best way to use API authentication in Laravel 9x because a lot of packages like JWT are not compatible with the Laravel version 9
composer require laravel/passport
one the command above is done, you will need to run the migration again to create tables for the authentication
php artisan migrate
then you can generate Passport tokens using
php artisan passport:install
Be careful that every time you run the migration command or fresh the migration using any of these commands php artisan migrate:fresh or php artisan migrate you will need to run the command of generating the tokens (php artisan passport:install)
Then open the app.php config file and make sure that there is a guard called API with driver passport
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
'hash' => true,
],
],
and then in AuthServiceProvider.php add Passport::routes();
<?php
namespace App\Providers;
//Import Passport
use Laravel\Passport\Passport;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
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();
//Add passport routes
Passport::routes();
}
}
then I will start a controller called users_controller so I can add the login method to get a token
php artisan make:controller authentication/users_controller
and we can use the Laravel Tinker to register a new user
php artisan tinker
\App\Models\User::create([ "name" => "Mohamed atef", "email" => "test@test.com", "password" => bcrypt("password123") ]);
Note that you can modify the user table from database/migrations/"search about user table probably the first one"
the login function will be
public function login(Request $req){
$validator = Validator::make($req->all(), [
'email' => 'required|email',
'password' => 'required',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 400);
}
if(Auth::guard('api')->attempt(['email' => request('email') , 'password' => request('password')])){
$token = Auth::guard('api')->user()->createToken('auth_token')->accessToken;
$lastLogin = User::find(Auth::guard('api')->user()->id);
$lastLogin->last_login = Carbon::now()->format('Y-m-d\TH:i:s.vP');
$lastLogin->save();
return response()->json([ "user" => Auth::guard('api')->user(), "token" => $token ], 200);
} else {
return response()->json(['Error'], 400);
}
}
Note that the line below is responsible for generating the access token using Laravel passport
$token = Auth::guard('api')->user()->createToken('auth_token')->accessToken;
Now we can create routes for the login in the file called api.php
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\authentication\users_controller;
Route::middleware('auth:api')->get('/user', function (Request $request){
return $request->user();
});
Route::controller(users_controller::class)->prefix('/user')->group(function (){
Route::post('/login', 'login');
});
?>
Using Thunder Client (VSCode extension like Postman) I will generate a POST request on the login endpoint //127.0.0.1:8000/api/user/login
No Comments to show
© 2024 Copyrights reserved for web-brackets.com