Cookies
Cookies 用于存储会话令牌、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"
}
})
自定义 Cookies
所有 cookie 在服务器运行于生产模式时均为 httpOnly
和 secure
。
如果你想设置自定义的 cookie 名称和属性,可以通过在认证选项的 advanced
对象中设置 cookieOptions
来实现。
默认情况下,Better Auth 使用以下 cookies:
session_token
用于存储会话令牌session_data
如果启用了 cookie 缓存,则用于存储会话数据dont_remember
如果禁用了“记住我”功能,则用于存储dont_remember
标志
插件也可能使用 cookies 来存储数据。例如,双因素认证插件使用 two_factor
cookie 来存储双因素认证状态。
import { betterAuth } from "better-auth"
export const auth = betterAuth({
advanced: {
cookies: {
session_token: {
name: "custom_session_token",
attributes: {
// 设置自定义 cookie 属性
}
},
}
}
})
跨子域 Cookie
有时您可能需要跨子域共享 Cookie。例如,如果您有 app.example.com
和 auth.example.com
,并且在 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", // 您的域名
},
},
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
}
})