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.
Trong bài viết này thuộc series "Học Laravel" của codetuthub.com, chúng ta sẽ cùng nhau xây dựng một hệ thống custom user login và registration trong Laravel 11 mà không phụ thuộc vào các package như Breeze hay Jetstream. Bài viết này sẽ hướng dẫn bạn từng bước từ thiết lập cơ bản đến hoàn thiện chức năng.
1. Cài đặt dự án Laravel 11
Trước tiên, bạn cần cài đặt một dự án Laravel mới hoặc sử dụng dự án có sẵn. Để cài đặt Laravel 11, bạn cần đảm bảo rằng máy tính của bạn đã cài đặt Composer.
Bước 1: Tạo một dự án Laravel mới
Mở terminal và chạy lệnh sau để tạo một dự án Laravel mới:
composer create-project laravel/laravel laravel-custom-authSau khi cài đặt thành công, di chuyển vào thư mục dự án:
cd laravel-custom-authTiếp theo, bạn cần cấu hình file .env để kết nối với cơ sở dữ liệu. Đảm bảo rằng bạn đã thiết lập cấu hình cơ sở dữ liệu chính xác.
Bước 2: Tạo cơ sở dữ liệu và chạy migrate
Tạo một cơ sở dữ liệu trong MySQL và sau đó cập nhật thông tin kết nối trong file .env:
DB_DATABASE=your_database_name
DB_USERNAME=your_username
DB_PASSWORD=your_passwordChạy lệnh migrate để tạo các bảng mặc định của Laravel, bao gồm bảng users:
php artisan migrate2. Tạo Routes cho các trang Đăng Nhập và Đăng Ký
Trong Laravel, các route được định nghĩa trong file routes/web.php. Chúng ta sẽ thêm các route để hiển thị form đăng ký và đăng nhập, cũng như xử lý logic cho các chức năng này.
Mở file routes/web.php và thêm các route sau:
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');3. Tạo AuthController
Chúng ta sẽ tạo một controller để xử lý logic đăng nhập, đăng ký, và đăng xuất. Sử dụng lệnh Artisan để tạo AuthController:
php artisan make:controller AuthControllerMở 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.');
}
}Giải thích:
- showRegistrationForm(): Hiển thị form đăng ký người dùng.
- register(): Xử lý logic đăng ký, bao gồm xác thực dữ liệu và lưu người dùng vào cơ sở dữ liệu.
- showLoginForm(): Hiển thị form đăng nhập.
- login(): Xử lý đăng nhập, kiểm tra email và mật khẩu có hợp lệ hay không.
- logout(): Đăng xuất người dùng và hủy bỏ session.
4. Tạo Views cho các trang Đăng Nhập và Đăng Ký
Tiếp theo, chúng ta sẽ 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.
