Laravel - Create User REST API
Mohamad Mahmood
2 min read
[0] Prep
Continue from previous article or download quickstart file.
Laravel v.10
Breeze v.1.28
[1] Create User REST API
Create API controller for user:
php artisan make:controller API/UserController --api
Add new routes for UserController API:
(file: C:\laragon\www\larabreeze\routes\api.php )
use App\Http\Controllers\API\UserController;
Route::get('/users', [UserController::class, 'index']);
Route::post('/users/register', [UserController::class, 'register']);
Route::post('/users/login', [UserController::class, 'login']);
Route::post('/users/me', [UserController::class, 'me'])->middleware('auth:sanctum');
Put some test codes:
(file: C:\laragon\www\larabreeze\app\Http\Controllers\REST\UserController.php )
<?php
namespace App\Http\Controllers\REST;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(): JsonResponse
{
return response()->json(['message' => 'index test'], 200);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request): JsonResponse
{
return response()->json(['message' => 'store test'], 200);
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}
Outcome:
GET
POST
Add register function to process user registration:
public function register(Request $request): JsonResponse
{
$request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'confirmed', \Illuminate\Validation\Rules\Password::defaults()],
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
event(new Registered($user));
return response()->json([
'message' => 'User created successfully. Check email for verfication.'],
201);
}
Add login function to process user login:
public function login(Request $request): JsonResponse
{
$credentials = $request->only('email', 'password');
if (!Auth::attempt($credentials)) {
return response()->json([
'user' => null,
'message' => 'Invalid login details',
'status' => 'failed',
], 200);
}
$user = User::where("email", $request["email"])->firstOrFail();
$user_out = [
'id' => $user->id,
'email' => $user->email,
'email_verified_at' => $user->email_verified_at,
'status' => 'loggedin',
];
if ($user->email_verified_at !== null) {
$token = $user->createToken('auth_token')->plainTextToken;
$user_out['user_token'] = $token;
$user_out['token_type'] = 'Bearer';
$user_out['verified'] = true;
} else {
$user_out['verified'] = false;
}
return response()->json($user_out, 200);
}
Add me function to check a token:
public function me(Request $request): JsonResponse
{
return response()->json($request->user(), 200);
}
Test user registration using Postman:
Test user login using Postman:
(note: name is optional)
status is loggedin
but verified is false
.
Check mailbox:
Click verification link:
Test login again:
Check the user_token:
0
Subscribe to my newsletter
Read articles from Mohamad Mahmood directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Mohamad Mahmood
Mohamad Mahmood
Mohamad's interest is in Programming (Mobile, Web, Database and Machine Learning). He studies at the Center For Artificial Intelligence Technology (CAIT), Universiti Kebangsaan Malaysia (UKM).