feat: verify email

This commit is contained in:
2026-05-20 20:40:23 +02:00
parent 75b2743e75
commit 7892fb9a02
16 changed files with 495 additions and 9 deletions
+61 -1
View File
@@ -7,6 +7,7 @@ use App\Http\Requests\RegisterRequest;
use App\Http\Requests\UpdateUserRequest;
use App\Http\Resources\UserResource;
use App\Models\User;
use Illuminate\Auth\Events\Verified;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -14,10 +15,11 @@ use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Illuminate\View\View;
class AuthController extends Controller
{
public function register(RegisterRequest $request)
public function register(RegisterRequest $request): JsonResponse
{
$data = $request->validated();
@@ -33,9 +35,12 @@ class AuthController extends Controller
'avatar_url' => $avatarPath,
]);
$user->sendEmailVerificationNotification();
$token = $user->createToken('api', ['user'])->plainTextToken;
return response()->json([
'message' => 'Compte créé. Consulte tes emails pour le vérifier.',
'user' => new UserResource($user),
], 201)->cookie('token', $token, 60 * 24 * 30);
}
@@ -52,6 +57,12 @@ class AuthController extends Controller
], 401);
}
if (! $user->hasVerifiedEmail()) {
return response()->json([
'message' => 'Vérifie ton adresse email avant de te connecter.',
], 403);
}
$token = $user->createToken('api')->plainTextToken;
return response()->json([
@@ -59,6 +70,55 @@ class AuthController extends Controller
])->cookie('token', $token, 60 * 24 * 30);
}
public function verifyEmail(Request $request, string $id, string $hash): JsonResponse|View
{
$user = User::findOrFail($id);
abort_unless(
hash_equals($hash, sha1($user->getEmailForVerification())),
403
);
$alreadyVerified = $user->hasVerifiedEmail();
if (! $alreadyVerified) {
$user->markEmailAsVerified();
event(new Verified($user));
}
if ($request->expectsJson()) {
return response()->json([
'message' => $alreadyVerified
? 'Compte déjà vérifié.'
: 'Compte vérifié avec succès.',
'user' => new UserResource($user->fresh()),
]);
}
return view('auth.email-verified', [
'alreadyVerified' => $alreadyVerified,
'appName' => config('app.name'),
]);
}
public function sendVerificationEmail(Request $request): JsonResponse
{
$user = $request->user();
if ($user->hasVerifiedEmail()) {
return response()->json([
'message' => 'Compte déjà vérifié.',
]);
}
$user->sendEmailVerificationNotification();
return response()->json([
'message' => 'Email de vérification envoyé.',
]);
}
public function logout(): JsonResponse
{
$request = request();