Laravel JetStream

LAMP Feb 17, 2021

Giới thiệu

Laravel 8 ra đời với những cải tiến so với phiên bản Laravel 7.x bằng việc ra mắt Laravel Jetstream, model factory classes, migration squashing, job batching, cải tiến rate limiting, cải tiến queue, dynamic Blade components, Tailwind pagination views, time testing helpers, cải tiến artisan serve, cải tiến event listener, sửa lỗi và nhiều cải tiến khác. Một trong những cải tiến nổi bật nhất dựa trên giao diện người dùng đó là Laravel Jetstream.

Theo định nghĩa trên trang chủ Laravel Jetstream là một bộ khung được xây dựng cho Laravel bao gồm các chức năng đăng nhập, đăng ký, xác thực địa chỉ email, xác thực 2 lớp (two-factor authentication), quản lý session, hỗ trợ API thông qua Laravel Sanctum, và tuỳ chọn quản lý team. Laravel Jetstream thay thế và cải tiến dựa trên authentication UI có sẵn ở phiên bản Laravel trước. Tuy nhiên hiểu một cách đơn giản thì nó là một package dựng sắn hỗ trợ các chức năng cơ bản cho người dùng.

Jetstream được thiết kế bằng Tailwind CSS và cung cấp lựa chọn sử dụng Livewire hoặc Inertia. Trong đó, Laravel Livewire là một thư viện giúp bạn dễ dàng xây dựng các giao diện bằng cách sử dụng Laravel Blade còn Laravel Inertia là một khung JavaScript đầy đủ hỗ trợ Vue.js.

Cài đặt

Đầu tiên ta phải build một dự án Laravel phiên bản 8x trở lên, sau đó sử dụng Composer để cài đặt Jetstream vào trong dự án.

composer require laravel/jetstream

Sau khi cài đặt xong Jetstream package, bạn có thể chạy câu lệnh jetstream:install để lựa chọn sử dụng Laravel Livewire hoặc Laravel Inertia. Hoặc bạn có thể cài đặt riêng theo từng câu lệnh sau:

Với Livewire:

php artisan jetstream:install livewire

php artisan jetstream:install livewire --teams

Với Inertia:

php artisan jetstream:install inertia

php artisan jetstream:install inertia --teams

Features

Như đã nói ở trên, Laravel Jetstream tự động xây dựng các tính năng đăng nhập, đăng nhập hai yếu tố, đăng ký, đặt lại mật khẩu và xác minh email cho dự án của bạn, cho phép bạn bắt đầu xây dựng các tính năng bạn quan tâm thay vì lo lắng về các chi tiết phức tạp của xác thực người dùng. Chúng ta cùng điểm qua các chức năng cơ bản trên nhé !

Authentication

Jetstream hỗ trợ chức năng đăng ký,đăng nhập với những giao diện vô cùng bắt mắt.

Bên cạnh đó, Jetstream hỗ trợ chức năng quên mật khẩu bằng cách gửi thông báo xác nhận qua email và validate các trường khi người dùng nhập không đúng theo quy tắc như là mật khẩu phải có ít nhất 8 ký tự.

Profile Management

Tiếp theo là chức năng quản lý hồ sơ người dùng, đây là tính năng mới của laravel cho phép người dùng cập nhật tên của họ, địa chỉ email và ảnh đại diện với package ui-avatar hiển thị theo tên viết tắt của người dùng.

Two Factor Authentication

Laravel Jetstream hỗ trợ tính năng xác thực hai lớp cho tất cả các ứng dụng Jetstream. Các tính năng bảo mật của Laravel Jetstream được người dùng truy cập bằng menu dropdown trên cùng bên phải. Trong bảng điều khiển này, Jetstream hỗ trợ các phương thức cho phép người dùng kích hoạt và quản lý xác thực hai yếu tố cho tài khoản của họ.

Khi người dùng bật xác thực hai yếu tố, họ có thể quét mã QR đã cho bằng ứng dụng xác thực TOTP miễn phí như Google Authenticator. Ngoài ra, các mã khôi phục cũng hỗ trợ người dùng xác thực trên ứng dụng web. Tuy nhiên những cách xác thực này chỉ được dùng một lần duy nhất cho mỗi mã.

Browser Sessions

Trong dashboard, Jetstream kết hợp các chế độ xem cho phép người dùng xem các phiên trình duyệt được liên kết với tài khoản của họ. Ngoài ra, người dùng có thể "đăng xuất" phiên trình duyệt khác với phiên đang được sử dụng bởi thiết bị mà họ hiện đang sử dụng.

API

Jetstream tích hợp với Laravel Sanctum cung cấp một hệ thống xác thực cho các SPA (ứng dụng trang đơn), ứng dụng di động và các API đơn giản dựa trên mã thông báo. Sanctum cho phép mỗi người dùng ứng dụng của bạn tạo nhiều mã thông báo API cho tài khoản của họ. Các mã thông báo này có thể được cấp các quyền chỉ định các hành động mà mã thông báo được phép thực hiện.

Theo mặc định, bảng điều khiển tạo mã thông báo API có thể được truy cập bằng liên kết "API" của menu dropdown trong hồ sơ người dùng ở trên cùng bên phải. Từ màn hình này, người dùng có thể tạo mã thông báo API Sanctum có nhiều quyền khác nhau. Ví dụ các quyền là đọc, thêm, sửa, xóa trong mã thông báo (token). Chúng ta có thể hoàn toàn tự test chức năng này bằng Postman để xem được dữ liệu trả về thông qua các quyền mà người dùng cấp.

Teams

Tính năng cuối cùng của Jetstream chính là quản lý đội nhóm. Nó cho phép mỗi người dùng đăng ký tạo và thuộc nhiều nhóm. Theo mặc định, mọi người dùng đã đăng ký sẽ thuộc một nhóm "Cá nhân". Ví dụ: nếu người dùng có tên "Taylor Otwell" tạo tài khoản mới, họ sẽ được chỉ định vào nhóm có tên "Taylor's Team". Sau khi đăng ký, người dùng có thể đổi tên nhóm này hoặc tạo các nhóm bổ sung.

Bên cạnh đó, người dùng có thể mời các thành viên khác tham gia nhóm của mình và thiết lập quyền cho họ. Ví dụ người dùng mời một thành viên khác thông qua email ở mục Add Team Member trên dashboard và thiết lập quyền/vai trò quản trị (Adminstrator) hoặc chỉnh sửa (Editor). Sau khi ấn button Add thì người được mời làm thành viên sẽ được nhận một email thông báo xác nhận có muốn tham gia vào đội không ? Nếu chọn nút chấp nhận trong mail thì người đó sẽ được tham gia luôn vào đội.

Tổng kết

Vậy là chúng ta đã cùng nhau tìm hiểu một cách tổng quan nhất về Laravel JetStream là gì, các tính năng của nó như thế nào và nhận ra rằng đây chính là một món ăn liền nhanh nhất từ trước đến giờ của Laravel. Chẳng phải tốn công xây dựng từ đầu những chức năng cơ bản mà trang web nào cũng có như đăng ký, đăng nhập, quản lý hồ sơ người dùng,... nhưng cái gì cũng có cái giá của nó, để custom được package này thì cũng là một vấn đề đấy đấy nhá. Cảm ơn mọi người đã đọc bài viết của mình !

Tài liệu tham khảo

Laravel Jetstream
Beautifully designed application scaffolding for Laravel

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.