Axios interceptor la gi? Tại sao lại được quan tâm nhiều đến vậy, hiệu quả của việc sử dụng interceptors trong Axios như thế nào? Và cơ chế lấy lại token khi token hết hạn khi sử dụng interceptors axios kết hợp với refreshToken.
Nhưng đó là hiểu quy trình, vậy còn việc apply vào thực thế thế nào. Khi mà trường hợp khách hàng đột nhiện token hết hạn?? Vậy bài viết này sẽ giúp bạn làm được điều đó khi sử dụng Axios interceptor.
Axios interceptor là gì?
Interceptor có thể hiểu như một bước tường lưới chặn các request, response của ứng dụng để cho phép kiểm tra, thêm vào header hoặc thay đổi các param của request, response. Nó cho phép chúng ta kiểm tra các token ứng dụng, Content-Type hoặc tự thêm các header vào request. Điều này cho phép chúng ta tận dụng tối đa thao tác chỉnh sửa header, body, param request gửi lên server sao cho hợp lý nhất, bảo mật nhất.
Sử dụng axios interceptors.response.use làm mới token
Và bây giờ là thực hành đây. Tôi sẽ lấy code ở bài trước mà chúng ta đã tạo cho backend một API cho phép user login tạo token và refreshToken các bạn có thể lấy CODE tại Github. Ở đây sẽ sử dụng axios để đạt được điều đó, phương pháp đầu tiên là chặn sau yêu cầu mỗi lần request, vì vậy axios.interceptors.response.use() phương pháp này sẽ được sử dụng tại bài này.
<!DOCTYPE html>
<html>
<head>
<title>Get list Users</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>Get list Users</h1>
<p>Welcome to Admin</p>
<button id="get-token">Get Token vs refreshToken</button>
<button id="get-data-without-auto">Get Data chưa tự động khi token hết hạn</button>
<button id="get-data-with-auto">Get Data tự động khi token hết hạn lấy lại token mới sử dụng refreshToken</button>
<h3>Status: </h3><p id="results"></p>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="module" src="/javascripts/script.js"></script>
</body>
</html>
Đây là toàn bộ mã nguồn của chương trình chúng ta và chúng ta sẽ đi lần lượt việc giải thích sau:
axios.interceptors.response.use thực hiện đánh chặn
Giao diện back-end thường sẽ có cấu trúc dữ liệu trả về kèm theo các code, chẳng hạn như:
Giải thích một số thông số của các backend hiện nay. status: Thể hiện request này success hay error message: Nếu success hay error thì trả về kết quả đúng và sai cái gì? code: 401, hay 403 thể hiện quyền truy cập. Như tôi ở đây, thỏa thuận với back-end khi code === 401 và auto = 'yes' như vậy tôi hiểu là token đã hết hạn cần phải tự động làm mới token.
Quy trình là nó thế này, ở demo này tôi có 3 button đó là get token, get data khi token hết hạn và get data tự động khi token hết hạn. Như hình ảnh đây.
Khi tôi click get token thì nó có nhiệm vụ là login nếu thành công thì sẽ có được token và refreshToken được lưu trữ ở localStorage (Không khuyến khích lưu token ở localStorage, lý do đọc tại đây "Token nên lưu ở đâu?")
Button get data khi token hết hạn là một ví dụ khi hết hạn token thì bạn không thể nhận được data.
Button get data khi token hết hạn và get data tự động là sẽ tự động set một token mới và lấy dữ liệu.
Như vậy là đã quá rõ rồi, bạn nào chưa hiểu vui lòng nhắn tin đến page để được giải đáp sâu hơn nhé!