Laravel 10.x 이상 설치 (또는 9.x도 가능)
Composer, PHP 8.x 이상
MySQL 혹은 SQLite 등 DB 설정 완료
composer create-project laravel/laravel loginApp
cd loginApp
.env 파일 수정
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=login_app
DB_USERNAME=root
DB_PASSWORD=비밀번호
DB 생성 후 마이그레이션:
php artisan migrate
php artisan tinker
use App\Models\User;
use Illuminate\Support\Facades\Hash;
User::create([
'name' => 'admin',
'email' => 'admin@example.com',
'password' => Hash::make('1234')
]);
routes/web.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AuthController;
Route::get('/', fn() => redirect('/login'));
Route::get('/login', [AuthController::class, 'showLogin'])->name('login');
Route::post('/login', [AuthController::class, 'login']);
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
Route::get('/dashboard', [AuthController::class, 'dashboard'])->middleware('auth');
php artisan make:controller AuthController
app/Http/Controllers/AuthController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
public function showLogin()
{
return view('login');
}
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
return redirect()->intended('/dashboard');
}
return back()->withErrors([
'login' => '이메일 또는 비밀번호가 올바르지 않습니다.',
]);
}
public function dashboard()
{
return view('dashboard');
}
public function logout()
{
Auth::logout();
return redirect('/login');
}
}
<!DOCTYPE html>
<html>
<head>
<title>로그인</title>
</head>
<body>
<h2>로그인</h2>
@if ($errors->any())
<div style="color: red;">
{{ $errors->first('login') }}
</div>
@endif
<form method="POST" action="/login">
@csrf
<label>이메일</label>
<input type="email" name="email" required><br><br>
<label>비밀번호</label>
<input type="password" name="password" required><br><br>
<button type="submit">로그인</button>
</form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>대시보드</title>
</head>
<body>
<h2>{{ auth()->user()->name }}님, 환영합니다.</h2>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">로그아웃</button>
</form>
</body>
</html>
세션 유지와 인증 처리를 위해 web 미들웨어는 기본 적용되어 있으며, /dashboard에는 추가로 auth 미들웨어를 사용했습니다. 이 설정은 RouteServiceProvider에서 관리됩니다.
비밀번호는 Hash::make()로 암호화해야 하며, 로그인 시 Auth::attempt() 사용
로그인 시 brute-force 방지를 위한 로그인 시도 제한 (ThrottleRequests 미들웨어)도 고려
프로덕션 환경에서는 HTTPS 적용 권장