[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
.