Trong quá trình phát triển ứng dụng web với Laravel, một trong những tính năng cơ bản nhất là đăng nhập và đăng ký người dùng. Mặc dù Laravel đã cung cấp sẵn các chức năng này thông qua package Laravel Breeze
hoặc Laravel Jetstream
, nhưng đôi khi bạn cần tạo một hệ thống đăng nhập và đăng ký tuỳ chỉnh để đáp ứng các yêu cầu cụ thể của ứng dụng.
Tạo dự án mới
composer create-project laravel/laravel laravel-custom-auth
Sau khi tạo dự án xong thì chuyển vào thư mục đó
cd laravel-custom-auth
Tạo CSDL, chạy migrate
- Tạo CSDL xong rồi chỉnh thông tin kết nối trong file .env
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_password
- Chạy migrate:
php artisan migrate
Tạo Routes cho các trang Đăng Nhập và Đăng Ký
Cập nhật routers/web.php
use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;
Route::get('/register', [AuthController::class, 'showRegistrationForm'])->name('register');
Route::post('/register', [AuthController::class, 'register']);
Route::get('/login', [AuthController::class, 'showLoginForm'])->name('login');
Route::post('/login', [AuthController::class, 'login']);
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
Tạo AuthController
php artisan make:controller AuthController
Mở file app/Http/Controllers/AuthController.php và cập nhật như sau:
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
class AuthController extends Controller
{
// Hiển thị form đăng ký
public function showRegistrationForm()
{
return view('auth.register');
}
// Xử lý đăng ký người dùng
public function register(Request $request)
{
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8|confirmed',
]);
User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
return redirect()->route('login')->with('success', 'Đăng ký thành công. Bạn có thể đăng nhập.');
}
// Hiển thị form đăng nhập
public function showLoginForm()
{
return view('auth.login');
}
// Xử lý đăng nhập
public function login(Request $request)
{
$request->validate([
'email' => 'required|string|email',
'password' => 'required|string',
]);
if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) {
$request->session()->regenerate();
return redirect()->intended('dashboard')->with('success', 'Đăng nhập thành công.');
}
throw ValidationException::withMessages([
'email' => 'Thông tin đăng nhập không chính xác.',
]);
}
// Xử lý đăng xuất
public function logout(Request $request)
{
Auth::logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/login')->with('success', 'Bạn đã đăng xuất.');
}
}
Tạo các file view cho form đăng nhập và đăng ký. Trong thư mục resources/views, tạo một thư mục con tên là auth. Sau đó, tạo hai file login.blade.php và register.blade.php bên trong thư mục này.
login.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Đăng Nhập</title>
</head>
<body>
<h2>Đăng Nhập</h2>
@if(session('success'))
<div>{{ session('success') }}</div>
@endif
<form method="POST" action="{{ route('login') }}">
@csrf
<div>
<label>Email:</label>
<input type="email" name="email" value="{{ old('email') }}">
@error('email')
<span>{{ $message }}</span>
@enderror
</div>
<div>
<label>Mật khẩu:</label>
<input type="password" name="password">
@error('password')
<span>{{ $message }}</span>
@enderror
</div>
<button type="submit">Đăng Nhập</button>
</form>
</body>
</html>
register.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Đăng Ký</title>
</head>
<body>
<h2>Đăng Ký</h2>
@if(session('success'))
<div>{{ session('success') }}</div>
@endif
<form method="POST" action="{{ route('register') }}">
@csrf
<div>
<label>Tên:</label>
<input type="text" name="name" value="{{ old('name') }}">
@error('name')
<span>{{ $message }}</span>
@enderror
</div>
<div>
<label>Email:</label>
<input type="email" name="email" value="{{ old('email') }}">
@error('email')
<span>{{ $message }}</span>
@enderror
</div>
<div>
<label>Mật khẩu:</label>
<input type="password" name="password">
@error('password')
<span>{{ $message }}</span>
@enderror
</div>
<div>
<label>Nhập lại mật khẩu:</label>
<input type="password" name="password_confirmation">
</div>
<button type="submit">Đăng Ký</button>
</form>
</body>
</html>
Trang Dashboard và điều hướng sau khi đăng nhập thành công
Thêm routes:
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware('auth')->name('dashboard');
Tạo file
resources/views/dashboard.blade.php
:<!DOCTYPE html>
<html>
<head>
<title>Dashboard</title>
</head>
<body>
<h2>Chào mừng đến với Dashboard!</h2>
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit">Đăng Xuất</button>
</form>
</body>
</html>
Khởi động server: php artisan serve
- Khởi động server: php artisan serve
- Truy cập vào
http://localhost:8000/register
để đăng ký vàhttp://localhost:8000/login
để đăng nhập. Sau khi đăng nhập thành công, người dùng sẽ được chuyển hướng đến trangdashboard
.
https://tritue.edu.vn/tuecode/tracnghiem30/index.php/baiviet/post/view/id/232?id=232