- Laravel Sanctum 기반 세션 인증 시스템 구축 - Service-First 아키텍처: AuthService 작성 - FormRequest 분리: LoginRequest 검증 - DaisyUI 기반 로그인 UI 구현 - 라우트 설정: /login, /logout, /dashboard - Tailwind CSS 4.x PostCSS 설정 - Vite 빌드 완료 Phase 1-1: 인증 시스템 개발 완료
96 lines
4.4 KiB
PHP
96 lines
4.4 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="ko" data-theme="light">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
|
<title>로그인 - {{ config('app.name') }}</title>
|
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
</head>
|
|
<body class="bg-base-200">
|
|
<div class="hero min-h-screen">
|
|
<div class="hero-content flex-col">
|
|
<div class="text-center mb-4">
|
|
<h1 class="text-4xl font-bold">{{ config('app.name') }}</h1>
|
|
<p class="text-base-content/70 mt-2">관리자 패널</p>
|
|
</div>
|
|
|
|
<div class="card w-96 bg-base-100 shadow-xl">
|
|
<div class="card-body">
|
|
<h2 class="card-title justify-center mb-4">로그인</h2>
|
|
|
|
@if (session('success'))
|
|
<div class="alert alert-success mb-4">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
</svg>
|
|
<span>{{ session('success') }}</span>
|
|
</div>
|
|
@endif
|
|
|
|
@if ($errors->any())
|
|
<div class="alert alert-error mb-4">
|
|
<svg xmlns="http://www.w3.org/2000/svg" class="stroke-current shrink-0 h-6 w-6" fill="none" viewBox="0 0 24 24">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
</svg>
|
|
<span>{{ $errors->first() }}</span>
|
|
</div>
|
|
@endif
|
|
|
|
<form method="POST" action="{{ route('login') }}">
|
|
@csrf
|
|
|
|
<div class="form-control">
|
|
<label class="label">
|
|
<span class="label-text">이메일</span>
|
|
</label>
|
|
<input
|
|
type="email"
|
|
name="email"
|
|
value="{{ old('email') }}"
|
|
placeholder="email@example.com"
|
|
class="input input-bordered @error('email') input-error @enderror"
|
|
required
|
|
autofocus
|
|
/>
|
|
@error('email')
|
|
<label class="label">
|
|
<span class="label-text-alt text-error">{{ $message }}</span>
|
|
</label>
|
|
@enderror
|
|
</div>
|
|
|
|
<div class="form-control mt-4">
|
|
<label class="label">
|
|
<span class="label-text">비밀번호</span>
|
|
</label>
|
|
<input
|
|
type="password"
|
|
name="password"
|
|
class="input input-bordered @error('password') input-error @enderror"
|
|
required
|
|
/>
|
|
@error('password')
|
|
<label class="label">
|
|
<span class="label-text-alt text-error">{{ $message }}</span>
|
|
</label>
|
|
@enderror
|
|
</div>
|
|
|
|
<div class="form-control mt-4">
|
|
<label class="label cursor-pointer justify-start gap-2">
|
|
<input type="checkbox" name="remember" class="checkbox checkbox-sm" />
|
|
<span class="label-text">로그인 상태 유지</span>
|
|
</label>
|
|
</div>
|
|
|
|
<div class="form-control mt-6">
|
|
<button type="submit" class="btn btn-primary">로그인</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html> |