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

Continue with Axios

Save the full cheat sheet or work through every related task.

More JavaScript tasks

Back to the full Axios cheat sheet