Cookies

Cookies 用于存储会话令牌、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"
    }
})

自定义 Cookies

所有 cookie 在服务器运行于生产模式时均为 httpOnlysecure

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

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

  • session_token 用于存储会话令牌
  • session_data 如果启用了 cookie 缓存,则用于存储会话数据
  • dont_remember 如果禁用了“记住我”功能,则用于存储 dont_remember 标志

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

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

export const auth = betterAuth({
    advanced: {
        cookies: {
            session_token: {
                name: "custom_session_token",
                attributes: {
                    // 设置自定义 cookie 属性
                }
            },
        }
    }
})

有时您可能需要跨子域共享 Cookie。例如,如果您有 app.example.comauth.example.com,并且在 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", // 您的域名
        },
    },
    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