Cookie
Cookie 用于存储诸如会话令牌、OAuth 状态等数据。所有 Cookie 均使用认证选项中提供的 secret 密钥进行签名。
Cookie 前缀
默认情况下,Better Auth 的 Cookie 遵循 ${prefix}.${cookie_name} 格式。默认前缀为 "better-auth"。您可以通过在认证选项的 advanced 对象中设置 cookiePrefix 来更改前缀。
import { betterAuth } from "better-auth"
export const auth = betterAuth({
advanced: {
cookiePrefix: "my-app"
}
})自定义 Cookie
当服务器在生产模式下运行时,所有 Cookie 均为 httpOnly 和 secure。
如果您想设置自定义 Cookie 名称和属性,可以通过在认证选项的 advanced 对象中设置 cookieOptions 来实现。
默认情况下,Better Auth 使用以下 Cookie:
session_token用于存储会话令牌session_data用于在启用 Cookie 缓存时存储会话数据dont_remember用于在禁用rememberMe时存储标志
插件也可能使用 Cookie 来存储数据。例如,两因素认证插件使用 two_factor Cookie 来存储两因素认证状态。
import { betterAuth } from "better-auth"
export const auth = betterAuth({
advanced: {
cookies: {
session_token: {
name: "custom_session_token",
attributes: {
// Set custom cookie attributes
}
},
}
}
})跨子域名 Cookie
有时您可能需要在子域名之间共享 Cookie。
例如,如果您在 auth.example.com 上进行认证,您可能还想在 app.example.com 上访问相同的会话。
domain 属性控制哪些域名可以访问 Cookie。将它设置为您的根域名(例如 example.com)会使 Cookie 在所有子域名中可访问。为了安全,请遵循以下指南:
- 仅在必要时启用跨子域名 Cookie
- 将域名设置为所需的最特定范围(例如
app.example.com而非.example.com) - 注意可能访问这些 Cookie 的不受信任子域名
- 对于不受信任的服务,请考虑使用单独的域名(例如
status.company.com与app.company.com)
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
默认情况下,当服务器在生产模式下运行时,Cookie 才为安全。您可以通过在认证选项的 advanced 对象中将 useSecureCookies 设置为 true 来强制 Cookie 始终为安全。
import { betterAuth } from "better-auth"
export const auth = betterAuth({
advanced: {
useSecureCookies: true
}
})