javascript - Ionic 2 - Cách sử dụng mã làm mới để nhận JWT mới
Tôi có một ứng dụng di động Ionic 2 sử dụng Json Web Tokens (JWT) để xác thực với các tuyến khác nhau trên API node.js. Những JWT này có thời gian hết hạn ngắn và cần được làm mới bằng cách sử dụng mã thông báo làm mới (refresh token). Mã thông báo làm mới chỉ là một chuỗi ngẫu nhiên được lưu cả trong cơ sở dữ liệu và trên thiết bị di động. Xin lưu ý: Tôi KHÔNG sử dụng OAuth.
Làm thế nào để tôi có thể tái cấu trúc các cuộc gọi API của mình sao cho tất cả đều đi qua một phương thức duy nhất, phương thức này sẽ gửi một mã làm mới nếu cuộc gọi API ban đầu nhận được phản hồi 401 Unauthorized do JWT hết hạn? Nếu không, tôi sẽ phải viết logic để xử lý phản hồi đó trong từng cuộc gọi API riêng lẻ, điều mà tôi muốn tránh.
Đây là một ví dụ về một phương thức mà tôi đã triển khai trong TypeScript gọi API. Hiện tại nó chưa xử lý phản hồi 401 Unauthorized và cũng chưa gửi token làm mới:
public setBeerPref(beerPrefs) {
return new Promise((resolve, reject) => {
this.storage.get('email').then((email) => {
this.storage.get('token').then((token) => {
beerPrefs["email"] = email;
let headers = new Headers();
headers.append('Authorization', token);
headers.append('Content-Type', 'application/json');
let options = new RequestOptions({ headers: headers });
this.http.post('apiURL', beerPrefs, options)
.subscribe(res => {
let data = res.json();
resolve(data);
resolve(res.json());
}, (err) => {
reject(err);
});
});
});
});
}