在 Axios 中新增授權驗證有多種方式,取決於你的後端使用的授權機制(例如,Bearer Tokens, Basic Auth, API Keys 等)。以下是一些常見方法:
1. 使用 headers
新增 Authorization 頭: 這是最常用的方法,特別是對於 Bearer Tokens。
import axios from 'axios';
const token = localStorage.getItem('token'); // 獲取儲存的 token
axios.get('/api/user', {
headers: {
Authorization: `Bearer ${token}`, // 在 Authorization header 中新增 Bearer token
}
})
.then(response => {
// 處理響應
})
.catch(error => {
// 處理錯誤
});
// 或者,建立一個 Axios 例項以全域性配置授權頭:
const apiClient = axios.create({
baseURL: '/api',
headers: {
Authorization: `Bearer ${token}`
}
});
apiClient.get('/user')
.then(response => {
// 處理響應
})
.catch(error => {
// 處理錯誤
});
// 更靈活的方式,允許在每個請求中覆蓋全域性配置:
const apiClient = axios.create({
baseURL: '/api',
});
apiClient.get('/user', {
headers: {
Authorization: `Bearer ${localStorage.getItem('token')}`, // 每次請求時動態獲取token
}
})
2. 使用 auth
引數 (適用於 Basic Auth):
axios.get('/api/user', {
auth: {
username: 'your_username',
password: 'your_password'
}
})
.then(response => {
// 處理響應
})
.catch(error => {
// 處理錯誤
});
3. 使用請求攔截器 (interceptors): 攔截器可以在請求傳送前修改請求配置,例如新增授權頭。這對於需要在多個請求中新增相同授權資訊的情況非常有用。
// 新增請求攔截器
axios.interceptors.request.use(function (config) {
const token = localStorage.getItem('token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
}, function (error) {
// 處理請求錯誤
return Promise.reject(error);
});
// 更靈活的請求攔截器,允許根據不同請求新增不同的授權資訊:
axios.interceptors.request.use(config => {
if (config.url === '/api/special_resource') {
config.headers.Authorization = `ApiKey ${localStorage.getItem('apiKey')}`;
} else {
config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
}
return config;
}, error => Promise.reject(error));
4. 使用 params (適用於 API Keys): 如果你的 API 使用 API Key 透過查詢引數進行身份驗證,你可以直接在 URL 中或使用 params
選項新增它。
// 直接在 URL 中新增
axios.get('/api/user?api_key=YOUR_API_KEY')
// 使用 params 選項
axios.get('/api/user', {
params: {
api_key: 'YOUR_API_KEY'
}
})
選擇哪種方法取決於你的後端 API 的授權機制。 請查閱你的後端 API 文件,瞭解正確的授權方法和所需的引數。
重新整理 Token 的處理:
如果你的應用使用需要定期重新整理的 token,你可以在響應攔截器中處理 token 過期的情況:
axios.interceptors.response.use(
response => response,
error => {
const originalRequest = error.config;
if (error.response.status === 401 && !originalRequest._retry) { // 檢查是否為 401 錯誤且未重試
originalRequest._retry = true; // 標記已重試
return refreshToken().then(newToken => { // 呼叫重新整理 token 的函式
axios.defaults.headers.common['Authorization'] = 'Bearer ' + newToken; // 更新 token
originalRequest.headers['Authorization'] = 'Bearer ' + newToken; // 更新原始請求的 token
return axios(originalRequest); // 重新傳送請求
});
}
return Promise.reject(error);
}
);
// refreshToken 函式示例 (你需要根據你的後端 API 實現具體的邏輯)
async function refreshToken() {
const refreshToken = localStorage.getItem('refreshToken');