با استفاده از رهگیری های axios ، تازه کردن توکن در واکنش

ورود به سیستم کاربران برای هر برنامه وب مدرن ضروری است. یک راه برای دستیابی به این هدف با چرخش توکن، روشی که به طور خودکار با استفاده از یک نشانه تازه ، نشانه های دسترسی را منقضی می کند ، همه بدون اینکه تجربه کاربر را قطع کند. در این راهنمای دوستانه مبتدی ، یاد می گیرید که چگونه چرخش نشانه را در یک برنامه React با استفاده از رهگیری های Axios ، بدون دخالت در منطق سرور خود ، پیاده سازی کنید. ما همچنین گزینه های ذخیره سازی Token Token را نیز مقایسه خواهیم کرد تا بتوانید آنچه را برای پروژه خود بهترین انتخاب کنید انتخاب کنید.
چرخش نشانه چیست؟
چرخش توکن تکنیکی است که در آن به جای اینکه یک نشانه تازه سازی را برای همیشه نگه دارید ، هر بار که از آن استفاده می کنید ، یک توکن تازه تازه دریافت می کنید. این باعث می شود برنامه شما ایمن تر شود زیرا حتی اگر یک نشانه تازه سازی به سرقت رفته باشد ، فقط یک بار قبل از نامعتبر شدن قابل استفاده است.
چگونه رهگیری Axios کمک می کند؟
رهگیری های Axios به شما امکان می دهند قبل از ارسال درخواست یا پس از دریافت پاسخ ، منطق را اجرا کنید. در اینجا ، ما از a استفاده خواهیم کرد رهگیری کننده برای تشخیص اینکه چه زمانی یک نشانه دسترسی منقضی شده است و به طور خودکار یک مورد جدید را با استفاده از توکن تازه-با توجه به کاربر متوجه می شود.
مثال گام به گام: چرخش توکن با Axios
در زیر یک اجرای ساده است.
// api.js
import axios from 'axios';
// Create an Axios instance
const api = axios.create({
baseURL: 'https://your-api-url.com', // Replace with your backend URL
});
// Function to get tokens from storage
const getTokens = () => {
return {
accessToken: localStorage.getItem('accessToken'),
refreshToken: localStorage.getItem('refreshToken'),
};
};
// Function to save tokens to storage
const setTokens = ({ accessToken, refreshToken }) => {
localStorage.setItem('accessToken', accessToken);
if (refreshToken) localStorage.setItem('refreshToken', refreshToken);
};
// Add the access token to every request
api.interceptors.request.use((config) => {
const { accessToken } = getTokens();
if (accessToken) {
config.headers.Authorization = `Bearer ${accessToken}`;
}
return config;
});
// Handle token expiration and rotation
api.interceptors.response.use(
(response) => response,
async (error) => {
const originalRequest = error.config;
// If the access token has expired, try to refresh
if (
error.response &&
error.response.status === 401 &&
!originalRequest._retry
) {
originalRequest._retry = true;
const { refreshToken } = getTokens();
if (refreshToken) {
try {
// Request new access token
const res = await axios.post('/auth/refresh', {
refreshToken,
});
// Save new tokens
setTokens(res.data);
// Retry the original request with new token
originalRequest.headers.Authorization = `Bearer ${res.data.accessToken}`;
return api(originalRequest);
} catch (refreshError) {
// Refresh token invalid, force logout or redirect to login
localStorage.clear();
window.location.href = '/login';
}
}
}
// Any other error
return Promise.reject(error);
}
);
export default api;
چگونه کار می کند:
Visual Flow
User clicks "Profile" →
Access token expired →
401 error →
Interceptor calls refresh endpoint →
Success? →
Retry original request →
User sees profile (no error)
Failure? →
Show login prompt (user sees error)
- هر درخواست شامل نشانه دسترسی است.
- اگر سرور 401 (غیرمجاز) را برگرداند ، رهگیر تلاش می کند تا با استفاده از نشانه تازه ، نشانه را تازه کند.
- در صورت موفقیت ، درخواست اصلی را با نشانه دسترسی جدید احیا می کند.
- در صورت عدم موفقیت ، کاربر کاربر را بیرون می کشد.
گزینه های ذخیره سازی توکن: جوانب مثبت و منفی
گزینه ذخیره سازی | جوانب | منفی |
---|---|---|
انباره محلی | استفاده آسان ، پس از بارگیری مجدد ادامه می یابد | در برابر حملات XSS آسیب پذیر است |
انباره جلسه | ایمن تر از LocalStorage ، که در Tab Close پاک شده است | هنوز هم در برابر XSS آسیب پذیر است ، پایدار نیست |
کوکی های httponly | محافظت از XSS ، به طور خودکار ارسال می شود | راه اندازی پیچیده تر ، آسیب پذیر در برابر CSRF |
خلاصه:
- ذخیره محلی: ساده اما امن تر.
- ذخیره جلسه: کمی ایمن تر ، اما داده ها در Tab Close از بین می روند.
- کوکی های httponly: امن ترین ، اما نیاز به تغییرات پس زمینه و محافظت از CSRF دارد.
پایان
با رهگیری Axios ، می توانید به راحتی چرخش Token را در برنامه React خود پیاده سازی کنید. این باعث می شود کاربران بدون هیچ زحمتی اضافی به صورت یکپارچه و ایمن وارد شوند. به یاد داشته باشید که روش ذخیره سازی توکن را انتخاب کنید که متناسب با نیازهای امنیتی و نیازهای برنامه شما باشد.
با تشکر از شما برای خواندن ، و یک روز زیبا! ❤