Ở bài trước, chúng ta đã cài đặt Laravel Breeze và có thể đăng ký, đăng nhập vào hệ thống.
Tuy nhiên, khi người dùng nhập Email và Password rồi nhấn Login, phía sau Laravel đã thực hiện những công việc gì?
Trong bài này, chúng ta sẽ tìm hiểu quy trình đăng nhập, Session và cách lấy thông tin người dùng đang đăng nhập để sử dụng trong ứng dụng.
Login là gì?
Login (Đăng nhập) là quá trình xác thực người dùng.
Người dùng cung cấp:
Email
Password
Laravel sẽ kiểm tra thông tin này với dữ liệu trong cơ sở dữ liệu.
Nếu hợp lệ:
Tạo Session.
Ghi nhớ người dùng.
Cho phép truy cập các trang được bảo vệ.
Nếu không hợp lệ:
Trả về trang đăng nhập.
Hiển thị thông báo lỗi.
Quy trình Login
Người dùng
│
▼
Nhập Email + Password
│
▼
Request
│
▼
Validation
│
▼
Kiểm tra Database
│
▼
Password Hash
│
▼
Đúng?
│ │
Có Không
│ │
▼ ▼
Tạo Session Báo lỗi
│
▼
Chuyển đến Dashboard
Đây là quy trình xác thực cơ bản trong Laravel.
Form Login
Laravel Breeze đã tạo sẵn Form:
<form method="POST"
action="{{ route('login') }}">
@csrf
<input
type="email"
name="email">
<input
type="password"
name="password">
<button type="submit">
Đăng nhập
</button>
</form>
Người dùng không cần tự viết từ đầu.
Validation
Trước khi xác thực, Laravel kiểm tra dữ liệu:
$request->validate([
'email' =>
['required', 'email'],
'password' =>
['required'],
]);
Điều này giúp loại bỏ những dữ liệu không hợp lệ ngay từ đầu.
Kiểm tra tài khoản
Sau khi Validation thành công, Laravel sẽ:
Tìm User theo Email.
Lấy mật khẩu đã được băm (Hash).
So sánh với mật khẩu người dùng nhập.
Nếu khớp:
Đăng nhập thành công
Nếu không:
Email hoặc mật khẩu không đúng.
Laravel không lưu mật khẩu gốc trong cơ sở dữ liệu.
Session
Khi đăng nhập thành công, Laravel tạo một Session.
Session lưu thông tin người dùng trong suốt thời gian họ sử dụng ứng dụng.
Ví dụ:
Người dùng
↓
Login
↓
Session
↓
Truy cập các trang bảo vệ
Khi đóng phiên làm việc hoặc đăng xuất, Session sẽ bị hủy.
Kiểm tra trạng thái đăng nhập
Laravel cung cấp:
auth()->check()
Ví dụ:
if (auth()->check()) {
echo 'Đã đăng nhập';
}
Nếu chưa đăng nhập:
echo 'Khách';
Lấy User hiện tại
$user = auth()->user();
Hoặc:
echo auth()->user()->name;
Email:
echo auth()->user()->email;
ID:
echo auth()->id();
Đây là các phương thức được sử dụng rất thường xuyên trong Laravel.
Tạo Post theo User
Ở các bài trước chúng ta dùng:
'user_id' => 1
Bây giờ:
'user_id' => auth()->id()
Ví dụ:
Post::create([
'title' =>
$request->title,
'content' =>
$request->content,
'category_id' =>
$request->category_id,
'image' =>
$image ?? null,
'user_id' =>
auth()->id(),
]);
Bài viết sẽ thuộc về đúng người đang đăng nhập.
Hiển thị bài viết của tôi
Nhờ Relationship đã học:
$posts = auth()
->user()
->posts;
Hoặc:
$posts = Post::where(
'user_id',
auth()->id()
)->get();
Đây là chức năng phổ biến trong Dashboard cá nhân.
Hiển thị Profile
Giả sử đã tạo quan hệ One To One:
$profile = auth()
->user()
->profile;
Ví dụ:
echo $profile->phone;
echo $profile->address;
Blade
Laravel hỗ trợ:
@auth
Xin chào
{{ auth()->user()->name }}
@endauth
Nếu chưa đăng nhập:
@guest
<a href="{{ route('login') }}">
Login
</a>
@endguest
Nhờ vậy giao diện có thể thay đổi theo trạng thái người dùng.
Đăng xuất
Laravel Breeze đã tạo sẵn chức năng:
<form method="POST"
action="{{ route('logout') }}">
@csrf
<button>
Logout
</button>
</form>
Sau khi Logout:
Session bị hủy.
Người dùng trở về trạng thái khách.
Một số hàm thường dùng
| Hàm | Ý nghĩa |
|---|---|
| auth()->check() | Kiểm tra đã đăng nhập |
| auth()->user() | Lấy User hiện tại |
| auth()->id() | Lấy ID User |
| @auth | Chỉ hiển thị khi đã đăng nhập |
| @guest | Chỉ hiển thị khi chưa đăng nhập |
Tổng kết
Trong bài này chúng ta đã học:
Quy trình Login.
Validation.
Session.
auth()->check().auth()->user().auth()->id().@auth.@guest.Tạo Post theo người dùng đang đăng nhập.
Đăng nhập là nền tảng để xây dựng các chức năng như Dashboard, quản lý bài viết cá nhân, phân quyền và bảo vệ dữ liệu.
Bài tập
Đăng nhập bằng tài khoản đã tạo ở bài trước.
Hiển thị tên người dùng trên thanh điều hướng.
Thay toàn bộ
user_id = 1bằngauth()->id().Hiển thị danh sách bài viết của người đang đăng nhập.
Hiển thị thông tin Profile của người dùng.
Thêm nút Logout vào giao diện.
Dùng
@authvà@guestđể thay đổi giao diện theo trạng thái đăng nhập.
Bài tiếp theo
Ở Bài 23, chúng ta sẽ tìm hiểu Register, cách tạo tài khoản mới, kiểm tra dữ liệu đầu vào, lưu người dùng vào cơ sở dữ liệu và mở rộng quy trình đăng ký để tự động tạo Profile hoặc gán Country mặc định sau khi người dùng đăng ký thành công.
x0




Không có nhận xét nào:
Đăng nhận xét