Construire application api avec authentification par Sanctum
Authentification
Créer un controller pour les apis authentifications
php artisan make:controller Api\\AuthController
Puis on fait les routes dans api
Route::post('auth/register', [AuthController::class, 'createUser']);
Route::post('auth/login', [AuthController::class, 'loginUser']);
Dans le controller AuthController je crée les functions
public function createUser(Request $request)
{
try {
//code...
$validateUser = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required',
]);
if ($validateUser->fails()) {
return response()->json([
'status' => false,
'message' => 'Erreur de Validation ',
'errors' => $validateUser->errors()
], 401);
}
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make( $request->password),
]);
return response()->json([
'status' => true,
'message' => 'User créé ',
'token' => $user->createToken("secret")->plainTextToken,
], 200);
} catch (\Throwable $th) {
//throw $th;
return response()->json([
'status' => false,
'message' => $th->getMessage()
], 500);
}
}
public function loginUser(Request $request)
{
try {
$validateUser = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required',
]);
if ($validateUser->fails()) {
return response()->json([
'status' => false,
'message' => 'Erreur de Validation ',
'errors' => $validateUser->errors()
], 401);
}
if (!Auth::attempt($request->only(['email', 'password']))) {
return response()->json([
'status' => false,
'message' => 'Email & Password non correct ',
], 401);
}
$user = User::where('email', $request->email)->first();
return response()->json([
'status' => true,
'message' => 'login OK ',
'token' => $user->createToken("secret")->plainTextToken,
], 200);
} catch (\Throwable $th) {
//throw $th;
return response()->json([
'status' => false,
'message' => $th->getMessage()
], 500);
}
}
Pour le client il faut alors créer une fonction login qui appelle l’ api (loginUser) et une fonction register qui appelle l’api (CreateUser) de l’application api pour récupérer ainsi le $token.
Données
Après avoir créé un model avec sa migration
php artisan make:model Patient-m
ou avoir importé une table et fait le model. On fait un request pour validation de Store et Update
php artisan make:request PatientStoreRequest
Ensuite on fait une resource pour indiquer ce que on veut montrer
php artisan make:resource Api/V1/PatientResource
Ensuite on fait le controller
php artisan make:controller Api/V1/PatientController --model=Patient
Dans le controller
public function index()
{
$patients = Patient::all();
return PatientResource::collection($patients);
}
public function store(PatientStoreRequest $request)
{
$patients = Patient::create($request->all());
return new PatientResource($patients);
}
public function update(PatientStoreRequest $request, Patient $patient)
{
$patient->update($request->all());
return new PatientResource($patient);
}
public function destroy(Patient $patient)
{
$patient->delete();
return response(null, 204);
}
Et dans les routes api
Route::group(['prefix' => 'v1']), function (){
Route::apiResource('Patients', PatientController::class);
}