Jul 18, 2024
HTTP Interceptor tại Next Client
if
để chỉ gọi API logout tại client.if (status === 401 && typeof window !== 'undefined') {
// Gọi API logout
}
Trang Logout
logout.tsx
.// Kiểm tra Token và gọi API logout
if (sessionToken === getCookie('sessionToken')) {
fetch('/api/logout', { method: 'POST', body: '{}' });
}
``
Redirect tại server component đối với trường hợp token hết hạn
redirect
từ next/navigation
để chuyển hướng đến trang logout.if (status === 401) {
redirect(`/logout?sessionToken=${sessionToken}`);
}
Decode JSON Web Token (JWT)
jsonwebtoken
và viết hàm decode cho JWT.import jwt from 'jsonwebtoken';
const decoded = jwt.decode(token);
const { exp } = decoded; // Lấy thời gian hết hạn từ JWT
Logout API
/api/logout
để xóa Cookie và trả về thông báo.if (force) {
// Xóa Cookie
res.setHeader('Set-Cookie', '...');
res.status(200).json({ message: 'Đã logout' });
}
Cài đặt và sử dụng abort controller
const controller = new AbortController();
const signal = controller.signal;
fetch('/api/logout', { signal });
controller.abort(); // Hủy request