Authentication Patterns in JavaScript
From the Axios cheat sheet · Advanced Patterns · verified Jul 2026
Authentication Patterns
Implement JWT refresh, bearer tokens, and auth interceptors
typescript
// Bearer token authentication
const api = axios.create({
baseURL: 'https://api.example.com'
});
api.interceptors.request.use((config) => {
const token = localStorage.getItem('accessToken');
if (token) {
config.headers.Authorization = \`Bearer \${token}\`;
}
return config;
});
// Token refresh on 401
api.interceptors.response.use(
(response) => response,
async (error) => {
const originalRequest = error.config;
if (error.response?.status === 401 && !originalRequest._retry) {
originalRequest._retry = true;
const refreshToken = localStorage.getItem('refreshToken');
const { data } = await axios.post('/auth/refresh', {
refreshToken
});
localStorage.setItem('accessToken', data.accessToken);
originalRequest.headers.Authorization = \`Bearer \${data.accessToken}\`;
return api(originalRequest);
}
return Promise.reject(error);
}
);✅ Store JWT in localStorage or httpOnly cookies for security
💡 Prevent multiple refresh calls with a shared promise
🔍 Use _retry flag to prevent infinite loops on failed refresh
⚡ Automatically retry failed requests after token refresh
authjwttokenrefreshsecurity