Laravel Authentication là gì? Xây dựng hệ thống đăng nhập chuẩn

Authentication là một trong những chức năng nền tảng của hầu hết ứng dụng web. Với Laravel, framework cung cấp sẵn nhiều thành phần hỗ trợ xác thực người dùng, từ kiểm tra email và mật khẩu đến quản lý session, bảo vệ route và đăng xuất. Thay vì tự xây dựng toàn bộ logic đăng nhập từ đầu, lập trình viên có thể tận dụng hệ thống Laravel Authentication để triển khai quy trình xác thực nhất quán và dễ mở rộng.

Laravel Authentication là gì?

Laravel Authentication là hệ thống xác thực người dùng được Laravel cung cấp nhằm xác định một người dùng có hợp lệ hay không trước khi cho phép họ truy cập các chức năng yêu cầu đăng nhập.

Một quy trình Authentication cơ bản thường diễn ra như sau:

Người dùng

   ↓

Nhập email + mật khẩu

   ↓

Laravel kiểm tra thông tin

   ↓

Xác thực thành công?

   ├── Không → Trả về lỗi đăng nhập

   └── Có → Tạo trạng thái đăng nhập

                ↓

          Truy cập tài nguyên được bảo vệ

Ví dụ, một website có thể cho phép người dùng chưa đăng nhập xem sản phẩm nhưng chỉ người dùng đã xác thực mới được:

  • Xem trang tài khoản.
  • Chỉnh sửa thông tin cá nhân.
  • Xem lịch sử đơn hàng.
  • Quản lý nội dung.
  • Truy cập trang quản trị.

Authentication tập trung vào câu hỏi “Người dùng này là ai và thông tin đăng nhập có hợp lệ không?” Trong khi đó, Authorization tập trung vào câu hỏi “Người dùng này được phép thực hiện hành động nào?”

READ  Authentication trong laravel là gì, hoạt động của nó như thế nào

Laravel Authentication hoạt động như thế nào?

Một hệ thống đăng nhập Laravel thường bao gồm các thành phần chính:

Thành phần Vai trò
User Model Đại diện cho người dùng
Database Lưu thông tin tài khoản
Authentication system Kiểm tra thông tin xác thực
Session Duy trì trạng thái đăng nhập
Middleware Bảo vệ route
Login form Nhận thông tin đăng nhập
Logout Kết thúc phiên đăng nhập

Khi người dùng gửi email và mật khẩu, Laravel xác minh thông tin với tài khoản tương ứng. Nếu hợp lệ, trạng thái xác thực được thiết lập để những request tiếp theo có thể nhận diện người dùng.

Các bước xây dựng hệ thống đăng nhập Laravel

Một hệ thống Authentication cơ bản có thể triển khai theo các bước:

  1. Chuẩn bị bảng người dùng.
  2. Cấu hình User Model.
  3. Tạo giao diện đăng nhập.
  4. Xử lý thông tin đăng nhập.
  5. Kiểm tra Authentication.
  6. Bảo vệ route bằng middleware.
  7. Xây dựng chức năng logout.

Trong thực tế, Laravel còn cung cấp các starter kit giúp tạo nhanh phần giao diện và logic xác thực thay vì phải xây dựng toàn bộ từ đầu. Truy cập website Học Laravel để biết thêm nhiều thông tin hữu ích.

1. Chuẩn bị User Model và database

Laravel thường sử dụng Model User để đại diện cho tài khoản người dùng.

Ví dụ:

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable

{

    protected $fillable = [

        ‘name’,

        ’email’,

        ‘password’,

    ];

}

Database cần có bảng lưu tài khoản, phổ biến là bảng users.

Một tài khoản cơ bản có thể gồm:

users

├── id

├── name

├── email

├── password

├── created_at

└── updated_at

Trong đó, mật khẩu không được lưu dưới dạng văn bản thuần túy. Laravel cung cấp cơ chế hashing để lưu mật khẩu dưới dạng đã băm.

2. Tạo giao diện đăng nhập

Form đăng nhập thường chứa email và mật khẩu:

<form method=”POST” action=”/login”>

    @csrf

    <input

        type=”email”

        name=”email”

        placeholder=”Email”

        required

    >

    <input

        type=”password”

        name=”password”

        placeholder=”Mật khẩu”

        required

    >

    <button type=”submit”>

        Đăng nhập

    </button>

</form>

Laravel sử dụng CSRF protection cho các request thay đổi trạng thái. Với form POST, cần sử dụng:

READ  Cách Hoạt Động Session Trong Laravel, Cấu Hình & Ứng Dụng Thực Tế

@csrf

để tạo CSRF token hợp lệ.

3. Xử lý đăng nhập

Phần xử lý đăng nhập có nhiệm vụ:

  • Nhận dữ liệu từ form.
  • Validate email và password.
  • Kiểm tra thông tin tài khoản.
  • Tạo trạng thái Authentication nếu thông tin hợp lệ.
  • Trả lỗi nếu đăng nhập thất bại.

4. Validate dữ liệu đăng nhập

Không nên đưa trực tiếp dữ liệu người dùng nhập vào quá trình xác thực mà không kiểm tra.

Laravel hỗ trợ validate ngay trong request:

$credentials = $request->validate([

    ’email’ => [‘required’, ’email’],

    ‘password’ => [‘required’],

]);

Trong đó:

  • required: trường bắt buộc phải có dữ liệu.
  • email: giá trị phải có định dạng email hợp lệ.

Validation giúp giảm dữ liệu không hợp lệ trước khi xử lý Authentication.

5. Kiểm tra trạng thái đăng nhập

Sau khi Authentication thành công, có thể kiểm tra người dùng hiện tại bằng:

Auth::check();

Ví dụ:

if (Auth::check()) {

    // Người dùng đã đăng nhập

}

Để lấy thông tin user hiện tại:

$user = Auth::user();

Hoặc:

$id = Auth::id();

Các phương thức này thường được sử dụng khi cần lấy thông tin tài khoản đang đăng nhập.

6. Bảo vệ route bằng Middleware

Không phải route nào cũng nên cho phép người dùng truy cập tự do.

Ví dụ, trang dashboard chỉ dành cho người đã đăng nhập:

Route::get(‘/dashboard’, function () {

    return view(‘dashboard’);

})->middleware(‘auth’);

Khi người dùng chưa đăng nhập truy cập route này, middleware auth sẽ kiểm tra trạng thái Authentication trước khi cho phép request tiếp tục.

Có thể áp dụng middleware cho một nhóm route:

Route::middleware(‘auth’)->group(function () {

    Route::get(‘/dashboard’, [DashboardController::class, ‘index’]);

    Route::get(‘/profile’, [ProfileController::class, ‘index’]);

});

Cách này phù hợp khi nhiều trang đều yêu cầu đăng nhập.

7. Xây dựng chức năng Logout

Đăng xuất có nhiệm vụ kết thúc trạng thái Authentication của người dùng.

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Auth;

public function logout(Request $request)

{

    Auth::logout();

    $request->session()->invalidate();

    $request->session()->regenerateToken();

    return redirect(‘/’);

}

Quy trình trên gồm ba bước chính:

Auth::logout();

Đăng xuất tài khoản.

$request->session()->invalidate();

Hủy session hiện tại.

$request->session()->regenerateToken();

Tạo lại CSRF token.

Đây là cách xử lý logout phù hợp cho hệ thống Authentication sử dụng session.

READ  Laravel Authorization là gì? Phân quyền người dùng chi tiết

Sử dụng Laravel Starter Kit để triển khai Authentication

Nếu không muốn tự xây dựng toàn bộ hệ thống đăng nhập, có thể sử dụng Laravel starter kit.

Starter kit giúp tạo sẵn những thành phần cơ bản như:

  • Đăng nhập.
  • Đăng xuất.
  • Đăng ký.
  • Reset mật khẩu.
  • Xác thực email tùy cấu hình.
  • Giao diện và route liên quan đến Authentication.

Cách tiếp cận này giúp giảm lượng code phải tự xây dựng và hạn chế việc triển khai sai những logic xác thực phổ biến. Tuy nhiên, starter kit không có nghĩa là hệ thống tự động phù hợp với mọi yêu cầu. Khi xây dựng ứng dụng thực tế, lập trình viên vẫn cần cấu hình Authentication, phân quyền và các chính sách bảo mật phù hợp với nghiệp vụ.

Authentication và Authorization khác nhau như thế nào?

Đây là hai khái niệm dễ bị nhầm lẫn khi xây dựng hệ thống tài khoản.

Tiêu chí Authentication Authorization
Mục đích Xác định người dùng Xác định quyền của người dùng
Câu hỏi Bạn là ai? Bạn được làm gì?
Ví dụ Đăng nhập bằng email + password User được sửa bài viết
Laravel Auth, middleware auth Gates, Policies, permissions

Ví dụ:

Người dùng đăng nhập thành công → Authentication. Sau đó Laravel kiểm tra người dùng có quyền xóa bài viết hay không → Authorization.

Vì vậy, xây dựng hệ thống đăng nhập mới chỉ giải quyết phần xác thực. Các chức năng phân quyền cần được thiết kế thêm dựa trên nghiệp vụ của ứng dụng.

Kết luận

Laravel Authentication là hệ thống xác thực giúp ứng dụng xác định người dùng và duy trì trạng thái đăng nhập. Một quy trình đăng nhập Laravel cơ bản thường gồm validate thông tin → xác thực tài khoản → regenerate session → bảo vệ route bằng middleware → logout và hủy session. Với những ứng dụng thông thường, có thể sử dụng các thành phần Authentication và starter kit của Laravel để rút ngắn thời gian phát triển. Khi xây dựng API hoặc hệ thống có yêu cầu xác thực đặc biệt, cần lựa chọn cơ chế Authentication phù hợp với loại client và kiến trúc ứng dụng.

Quan trọng nhất, Authentication chỉ giải quyết vấn đề xác thực người dùng. Nếu ứng dụng có nhiều vai trò như Admin, Manager, User hoặc các quyền thao tác khác nhau, cần triển khai thêm Authorization để kiểm soát chính xác những tài nguyên và hành động mà từng người dùng được phép thực hiện.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *