
Syncs JWT auth tokens into cookies for Strapi v5
released October 21, 2025
npm install @growy/strapi-plugin-auth-cookiePlugin that mirrors the JWT issued by Users & Permissions into cookies and reuses it in subsequent requests. Includes settings in the Strapi dashboard and signature verification to detect tampered tokens.
access_token cookie upon login, registration, reset, or OAuth.access_token.sig cookie via HMAC using Strapi's secret.Authorization: Bearer <token> into every incoming request if the signature is valid.npm install @growy/strapi-plugin-auth-cookie
# either
yarn add @growy/strapi-plugin-auth-cookieconfig/plugins.js file:
module.exports = () => ({
'auth-cookie': {
enabled: true,
config: {
enabled: true,
cookieName: 'access_token',
signatureCookieName: 'access_token.sig',
signatureEnabled: true,
signatureHttpOnly: true,
path: '/',
domain: null,
secure: false,
httpOnly: true,
sameSite: 'lax',
maxAge: null,
},
},
});After modifying the configuration, run npm run build and restart Strapi. Settings can also be managed from Admin → Settings → Auth Cookie.
enabled: Enables cookie mirroring.cookieName: Name of the JWT in the cookie.signatureEnabled: Enables the signature cookie; disable it only if you cannot access the JWT secret.signatureCookieName: Name of the signature cookie.signatureHttpOnly: Controls whether the signature is accessible from JavaScript (it is recommended to leave it set to true).path, domain: Cookie scope.secure, httpOnly, sameSite: Security attributes.maxAge: Duration in milliseconds (null = session cookie).config/middlewares.js to allow your frontend and enable credentials: true:module.exports = [
{
name: 'strapi::cors',
config: {
origin: ['https://app.example.com'],
credentials: true,
},
},
];url and proxy: true in config/server.js if you're using a CDN or a proxy (Nginx, Cloudflare).SameSite: 'none' and secure: true when the frontend and API are on different domains.domain to .your-domain.com if you're sharing cookies across subdomains.await fetch(`${import.meta.env.VITE_STRAPI_URL}/api/auth/local`, {
method: "POST",
credentials: "include",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ identifier, password }),
});The plugin will add the Authorization header to subsequent requests as long as access_token and access_token.sig are still valid.
MIT
Share your work with the community and get it listed in the Strapi ecosystem for everyone to discover and use.
Submit
