Cookie

Cookie 用于存储诸如会话令牌、OAuth 状态等数据。所有 Cookie 均使用认证选项中提供的 secret 密钥进行签名。

默认情况下,Better Auth 的 Cookie 遵循 ${prefix}.${cookie_name} 格式。默认前缀为 "better-auth"。您可以通过在认证选项的 advanced 对象中设置 cookiePrefix 来更改前缀。

auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    advanced: {
        cookiePrefix: "my-app"
    }
})

当服务器在生产模式下运行时,所有 Cookie 均为 httpOnlysecure

如果您想设置自定义 Cookie 名称和属性,可以通过在认证选项的 advanced 对象中设置 cookieOptions 来实现。

默认情况下,Better Auth 使用以下 Cookie:

  • session_token 用于存储会话令牌
  • session_data 用于在启用 Cookie 缓存时存储会话数据
  • dont_remember 用于在禁用 rememberMe 时存储标志

插件也可能使用 Cookie 来存储数据。例如,两因素认证插件使用 two_factor Cookie 来存储两因素认证状态。

auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    advanced: {
        cookies: {
            session_token: {
                name: "custom_session_token",
                attributes: {
                    // Set custom cookie attributes
                }
            },
        }
    }
})

有时您可能需要在子域名之间共享 Cookie。 例如,如果您在 auth.example.com 上进行认证,您可能还想在 app.example.com 上访问相同的会话。

domain 属性控制哪些域名可以访问 Cookie。将它设置为您的根域名(例如 example.com)会使 Cookie 在所有子域名中可访问。为了安全,请遵循以下指南:

  1. 仅在必要时启用跨子域名 Cookie
  2. 将域名设置为所需的最特定范围(例如 app.example.com 而非 .example.com
  3. 注意可能访问这些 Cookie 的不受信任子域名
  4. 对于不受信任的服务,请考虑使用单独的域名(例如 status.company.comapp.company.com
auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    advanced: {
        crossSubDomainCookies: {
            enabled: true,
            domain: "app.example.com", // your domain
        },
    },
    trustedOrigins: [
        'https://example.com',
        'https://app1.example.com',
        'https://app2.example.com',
    ],
})

默认情况下,当服务器在生产模式下运行时,Cookie 才为安全。您可以通过在认证选项的 advanced 对象中将 useSecureCookies 设置为 true 来强制 Cookie 始终为安全。

auth.ts
import { betterAuth } from "better-auth"

export const auth = betterAuth({
    advanced: {
        useSecureCookies: true
    }
})

On this page