Files
cesizen/WEB/app/Http/Controllers/Api/AuthController.php
T

127 lines
3.8 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class AuthController extends Controller
{
// AuthController.php
public function login(Request $request)
{
$fields = $request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
]);
// Log::info('Tentative de connexion', $request->all());
$user = User::where('email', $fields['email'])->first();
// Vérification du mot de passe haché (Sécurité)
if (! $user || ! Hash::check($fields['password'], $user->password)) {
return response([
'status' => 'error',
'message' => 'Identifiants invalides',
], 401);
}
// Vérification si le compte est actif
if (! $user->is_active) {
return response([
'status' => 'error',
'message' => 'Votre compte a été désactivé par un administrateur.',
], 403);
}
// Log::info('Email reçu: ' . $request->email);
// Log::info('Password saisi: ' . $request->password);
// Log::info('Hachage en BDD: ' . $user->password);
// Création du Token pour le mobile
$token = $user->createToken('android_token')->plainTextToken;
return response([
'status' => 'success',
'user' => $user,
'token' => $token,
], 200);
}
public function register(Request $request)
{
// 1. Validation des données (Standard Qualité)
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8|confirmed',
]);
Log::info('Tentative de création', $request->all());
if ($validator->fails()) {
Log::info($validator->errors());
return response()->json([
'status' => 'error',
'errors' => $validator->errors(),
], 422);
}
// 2. Création de l'utilisateur (Respect du MCD)
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password), // Chiffrement obligatoire
]);
// 3. Génération du token pour le mobile
$token = $user->createToken('android_token')->plainTextToken;
return response()->json([
'status' => 'success',
'message' => 'Compte créé avec succès',
'user' => $user,
'token' => $token,
], 201);
}
public function updateProfile(Request $request)
{
$user = $request->user();
$request->validate([
'current_password' => 'required',
'email' => [
'sometimes',
'email',
Rule::unique('users')->ignore($user->id), // Empêche les doublons en BDD
],
]);
// 2. Vérification de sécurité (RGPD/Confidentialité)
if (! Hash::check($request->current_password, $user->password)) {
return response()->json([
'status' => 'error',
'message' => 'Le mot de passe actuel est incorrect',
], 403);
}
// 3. Mise à jour dynamique (Evolutivité)
$data = $request->except(['current_password', 'password', 'id']);
$user->fill($data);
$user->save();
return response()->json([
'status' => 'success',
'user' => $user,
]);
}
}