Bạn vào Facebook -> Settings -> Security -> "Where you're logged in". Bạn thấy một danh sách thiết bị: "iPhone 15 - Hanoi", "MacBook - Ho Chi Minh". Bạn bấm "Log out" vào cái thiết bị lạ hoắc.
Đây chính là tính năng Session Management mà mọi Enterprise App đều phải có.
1. Data Modeling
Thay vì chỉ lưu 1 session string đơn giản, ta cần lưu một Object chi tiết vào Database (Redis/SQL).
model Session {
id String @id @default(cuid())
userId String
sessionToken String @unique
expires DateTime
// Metadata quan trọng
ipAddress String? // 1.2.3.4
userAgent String? // Mozilla/5.0 (Macintosh...)
deviceType String? // Mobile/Desktop
browser String? // Chrome/Safari
os String? // iOS/Windows
lastActive DateTime @default(now())
country String? // Vietnam
}2. Thu thập Metadata (Middleware)
Trong Next.js Middleware hoặc Route Handler login, ta có thể lấy thông tin này dễ dàng.
import { userAgent } from 'next/server';
// Trong API Login Route
const { device, browser, os } = userAgent(request);
const ip = request.headers.get('x-forwarded-for') || '127.0.0.1';
// Lưu vào DB khi tạo session
await db.session.create({
data: {
userId,
sessionToken,
deviceType: device.type, // 'mobile'
browser: browser.name, // 'Chrome'
os: os.name, // 'Windows'
ipAddress: ip,
}
});3. Remote Logout (Đăng xuất từ xa)
Tính năng này cứu mạng user khi họ lỡ quên đăng xuất ở máy công cộng (quán Net).
Cơ chế:
- User A bấm "Logout Session X".
- Server xóa bản ghi Session X trong Database.
- Lần tới khi "kẻ trộm" dùng máy X gọi API -> Server check DB thấy Session X không còn -> Trả về 401 Unauthorized -> Client tự động Redirect về Login.
4. Suspicious Login Detection (Cảnh báo đăng nhập)
Nếu User thường xuyên login từ Việt Nam, bỗng nhiên có login từ Nga? -> Cảnh báo ngay!
- GeoIP: Dùng thư viện
geoip-litehoặc API (như Vercel/Cloudflare) để map IP -> Country. - Logic: So sánh Country hiện tại với
lastLoginCountrytrong DB. - Action: Nếu khác -> Gửi Email: "Có phải bạn vừa đăng nhập từ Nga không?".
Kết luận
Một hệ thống Authentication tốt không chỉ là "Đăng nhập được". Nó phải cho User cảm giác Kiểm soát (Control) và An tâm (Peace of mind). Những tính năng nhỏ như "Log out all devices" chính là thứ tạo nên sự khác biệt của sản phẩm chuyên nghiệp.