[PR #8133] [MERGED] fix: prevent double encoded cookie #16013

Closed
opened 2026-04-13 10:21:01 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/better-auth/better-auth/pull/8133
Author: @Oluwatobi-Mustapha
Created: 2/24/2026
Status: Merged
Merged: 3/3/2026
Merged by: @himself65

Base: canaryHead: fix/custom-session-cookie-double-encode-8127


📝 Commits (3)

  • 5d96828 fix(custom-session): prevent double-encoded session cookies on refresh
  • 03f1116 style(custom-session): format session token regex in test
  • 1d34572 fix(cookies): remove redundant decoding logic for cookie values

📊 Changes

7 files changed (+52 additions, -5 deletions)

View changed files

📝 packages/better-auth/src/cookies/cookie-utils.ts (+10 -1)
📝 packages/better-auth/src/cookies/cookies.test.ts (+6 -0)
📝 packages/better-auth/src/integrations/next-js.ts (+1 -1)
📝 packages/better-auth/src/integrations/svelte-kit.ts (+1 -1)
📝 packages/better-auth/src/integrations/tanstack-start-solid.ts (+1 -1)
📝 packages/better-auth/src/integrations/tanstack-start.ts (+1 -1)
📝 packages/better-auth/src/plugins/custom-session/custom-session.test.ts (+32 -0)

📄 Description

Fix #8127

Decode forwarded Set-Cookie values in customSession before calling ctx.setCookie(...) so /get-session refresh does not double-encode session cookies (%25).

  • decode parsed cookie value before re-setting cookie
  • add regression test for refresh cookie encoding

Tests

  • corepack pnpm --dir packages/better-auth exec vitest run src/plugins/custom-session/custom-session.test.ts --maxWorkers=1
  • corepack pnpm --dir packages/better-auth exec vitest run src/cookies/cookies.test.ts --maxWorkers=1

Summary by cubic

Prevents double-encoding of session cookies during get-session refresh in the customSession plugin, fixing #8127. Cookie values are decoded once when parsing Set-Cookie so better-auth.session_token stays unchanged on refresh.

  • Bug Fixes
    • Centralize decoding in parseSetCookieHeader using a safe tryDecode only when "%" is present; add a unit test for URI-decoded values.
    • Remove redundant decode calls in Next.js, SvelteKit, and TanStack Start integrations.
    • Add a regression test to ensure the session token is identical after refresh and contains no %25.

Written for commit 1d345729d5. Summary will update on new commits.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/better-auth/better-auth/pull/8133 **Author:** [@Oluwatobi-Mustapha](https://github.com/Oluwatobi-Mustapha) **Created:** 2/24/2026 **Status:** ✅ Merged **Merged:** 3/3/2026 **Merged by:** [@himself65](https://github.com/himself65) **Base:** `canary` ← **Head:** `fix/custom-session-cookie-double-encode-8127` --- ### 📝 Commits (3) - [`5d96828`](https://github.com/better-auth/better-auth/commit/5d96828a08333d89a953ef1d0922222fa695ad1a) fix(custom-session): prevent double-encoded session cookies on refresh - [`03f1116`](https://github.com/better-auth/better-auth/commit/03f11162176ff55de4b8645f517043f6e9770a1d) style(custom-session): format session token regex in test - [`1d34572`](https://github.com/better-auth/better-auth/commit/1d345729d5493498b7319737a41821d0baea64c8) fix(cookies): remove redundant decoding logic for cookie values ### 📊 Changes **7 files changed** (+52 additions, -5 deletions) <details> <summary>View changed files</summary> 📝 `packages/better-auth/src/cookies/cookie-utils.ts` (+10 -1) 📝 `packages/better-auth/src/cookies/cookies.test.ts` (+6 -0) 📝 `packages/better-auth/src/integrations/next-js.ts` (+1 -1) 📝 `packages/better-auth/src/integrations/svelte-kit.ts` (+1 -1) 📝 `packages/better-auth/src/integrations/tanstack-start-solid.ts` (+1 -1) 📝 `packages/better-auth/src/integrations/tanstack-start.ts` (+1 -1) 📝 `packages/better-auth/src/plugins/custom-session/custom-session.test.ts` (+32 -0) </details> ### 📄 Description Fix #8127 Decode forwarded `Set-Cookie` values in `customSession` before calling `ctx.setCookie(...)` so `/get-session` refresh does not double-encode session cookies (`%25`). - decode parsed cookie value before re-setting cookie - add regression test for refresh cookie encoding Tests - `corepack pnpm --dir packages/better-auth exec vitest run src/plugins/custom-session/custom-session.test.ts --maxWorkers=1` - `corepack pnpm --dir packages/better-auth exec vitest run src/cookies/cookies.test.ts --maxWorkers=1` <!-- This is an auto-generated description by cubic. --> --- ## Summary by cubic Prevents double-encoding of session cookies during get-session refresh in the customSession plugin, fixing #8127. Cookie values are decoded once when parsing Set-Cookie so better-auth.session_token stays unchanged on refresh. - **Bug Fixes** - Centralize decoding in parseSetCookieHeader using a safe tryDecode only when "%" is present; add a unit test for URI-decoded values. - Remove redundant decode calls in Next.js, SvelteKit, and TanStack Start integrations. - Add a regression test to ensure the session token is identical after refresh and contains no %25. <sup>Written for commit 1d345729d5493498b7319737a41821d0baea64c8. Summary will update on new commits.</sup> <!-- End of auto-generated description by cubic. --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-04-13 10:21:01 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/better-auth#16013