跳至内容
从 NextAuth.js v4 迁移?阅读 我们的迁移指南.

类型

SvelteKitAuthConfig

配置 SvelteKitAuth 方法。

扩展

属性

adapter?

optional adapter: Adapter;

您可以使用 adapter 选项传入您的数据库适配器。

继承自

Omit.adapter

basePath?

optional basePath: string;

Auth.js API 端点的基本路径。

默认
"/api/auth" in "next-auth"; "/auth" with all other frameworks
继承自

Omit.basePath

callbacks?

optional callbacks: {
  jwt: (params) => Awaitable<null | JWT>;
  redirect: (params) => Awaitable<string>;
  session: (params) => Awaitable<Session | DefaultSession>;
  signIn: (params) => Awaitable<string | boolean>;
};

回调是异步函数,您可以使用它们来控制在执行操作时发生的情况。回调非常强大,特别是在涉及 JSON Web Token 的场景中,因为它们允许您在没有数据库的情况下实现访问控制,以及与外部数据库或 API 集成。

jwt()?
optional jwt: (params) => Awaitable<null | JWT>;

每当创建 JSON Web Token(例如,在登录时)或更新 JSON Web Token(例如,在客户端访问会话时)时,都会调用此回调。您在此处返回的任何内容都将保存在 JWT 中并转发到 session 回调。您可以在那里控制应该返回给客户端的内容。任何其他内容都将从您的前端保留。JWT 默认情况下通过您的 AUTH_SECRET 环境变量进行加密。

session 回调

参数
参数类型描述
params对象-
params.account?null | Account包含有关用于登录的提供者的信息。
还包括 TokenSet

注意
trigger"signIn""signUp" 时可用
params.isNewUser?布尔值已弃用
改用 trigger === "signUp"
params.profile?Profile从您的提供者返回的 OAuth 配置文件。
(在 OIDC 的情况下,它将是解码的 ID Token 或 /userinfo 响应)

注意
trigger"signIn" 时可用。
params.session?任何当使用 AuthConfig.session strategy: "jwt" 时,这是数据
通过 useSession().update 方法从客户端发送。

⚠ 注意,您应该在使用此数据之前验证它。
params.tokenJWTtrigger"signIn""signUp" 时,它将是 JWT 的子集,
nameemailimage 将被包含。

否则,它将是后续调用的完整 JWT
params.trigger?"signIn" | "update" | "signUp"检查 jwt 回调被调用的原因。可能的原因是
- 用户登录:回调第一次被调用时,userprofileaccount 将存在。
- 用户注册:在数据库中第一次为用户创建用户(当 AuthConfig.session.strategy 设置为 "database" 时)
- 更新事件:由 useSession().update 方法触发。
在后者的情況下,trigger 将是 undefined
params.userUser | AdapterUserOAuthConfig.profile 或 CredentialsConfig.authorize 回调的结果之一。

注意
trigger"signIn""signUp" 时可用。

资源
- 凭证提供者
- 用户数据库模型
返回值

Awaitable<null | JWT>

redirect()?
optional redirect: (params) => Awaitable<string>;

当用户被重定向到回调 URL 时(例如登录或注销),此回调函数会被调用。默认情况下,只允许与来源主机相同的 URL。您可以使用此回调函数来自定义该行为。

文档

示例
callbacks: {
  async redirect({ url, baseUrl }) {
    // Allows relative callback URLs
    if (url.startsWith("/")) return `${baseUrl}${url}`
 
    // Allows callback URLs on the same origin
    if (new URL(url).origin === baseUrl) return url
 
    return baseUrl
  }
}
参数
参数类型描述
params对象-
params.baseUrlstring网站的默认基本 URL(可作为备用)
params.urlstring客户端提供的回调 URL
返回值

Awaitable<string>

session()?
optional session: (params) => Awaitable<Session | DefaultSession>;

每当检查会话时,此回调函数就会被调用。(例如,调用 /api/session 端点时,使用 useSessiongetSession)。返回值将暴露给客户端,因此请注意您在此处返回的内容!如果您想向客户端提供通过 JWT 回调函数添加到令牌中的任何内容,您也必须在此处显式返回它。

⚠ 默认情况下,出于安全考虑,只会返回令牌的一部分(电子邮件、姓名、图像)。

仅在使用 JWT 会话策略时令牌参数可用,仅在使用数据库会话策略时用户参数可用。

jwt 回调函数

示例
callbacks: {
  async session({ session, token, user }) {
    // Send properties to the client, like an access_token from a provider.
    session.accessToken = token.accessToken
 
    return session
  }
}
参数
参数类型
params{ session: { user: AdapterUser; } & AdapterSession; user: AdapterUser; } & { session: Session; token: JWT; } & { newSession: any; trigger: "update"; }
返回值

Awaitable<Session | DefaultSession>

signIn()?
optional signIn: (params) => Awaitable<string | boolean>;

控制用户是否允许登录。返回 true 将继续登录流程。返回 false 或抛出错误将停止登录流程并将用户重定向到错误页面。返回字符串将把用户重定向到指定的 URL。

未处理的错误将抛出 AccessDenied,其消息设置为原始错误。

AccessDenied

示例
callbacks: {
 async signIn({ profile }) {
  // Only allow sign in for users with email addresses ending with "yourdomain.com"
  return profile?.email?.endsWith("@yourdomain.com")
}
参数
参数类型描述
params对象-
params.account?null | Account-
params.credentials?Record<string, CredentialInput>如果使用凭据提供程序,则它包含用户凭据
params.email?对象如果使用电子邮件提供程序,则在第一次调用时,它包含一个
verificationRequest: true 属性来指示它是在验证请求流程中触发的。
当用户单击登录链接后回调函数被调用时,
此属性将不存在。您可以检查 verificationRequest 属性
以避免向黑名单中的地址或域发送电子邮件,或仅为允许列表中的电子邮件地址显式生成它们
params.email.verificationRequest?布尔值-
params.profile?Profile如果使用 OAuth 提供程序,则它包含您的提供程序返回的完整
OAuth 个人资料。
params.userUser | AdapterUser-
返回值

Awaitable<string | boolean>

继承自

Omit.callbacks

cookies?

optional cookies: Partial<CookiesOptions>;

您可以覆盖 Auth.js 使用的任何 cookie 的默认 cookie 名称和选项。您可以使用自定义属性指定一个或多个 cookie,缺少的选项将使用 Auth.js 定义的默认值。如果您使用此功能,您可能希望创建条件行为以支持在开发和生产构建中设置不同的 cookie 策略,因为您将选择退出内置的动态策略。

  • 这是一个高级选项。高级选项与基本选项的传递方式相同,但可能具有复杂的影响或副作用。您应该尽量避免使用高级选项,除非您对使用它们非常熟悉。
默认值
{}
继承自

Omit.cookies

debug?

optional debug: boolean;

将 debug 设置为 true 以启用身份验证和数据库操作的调试消息。

默认值
false
继承自

Omit.debug

events?

optional events: {
  createUser: (message) => Awaitable<void>;
  linkAccount: (message) => Awaitable<void>;
  session: (message) => Awaitable<void>;
  signIn: (message) => Awaitable<void>;
  signOut: (message) => Awaitable<void>;
  updateUser: (message) => Awaitable<void>;
};

事件是不会返回响应的异步函数,它们对于审计日志记录很有用。您可以为以下任何事件指定处理程序,例如调试或创建审计日志。消息对象的内容因流程而异(例如,OAuth 或电子邮件身份验证流程、JWT 或数据库会话等),但通常包含用户对象和/或 JSON Web 令牌的内容以及与事件相关的其他信息。

默认值
{}
createUser()?
optional createUser: (message) => Awaitable<void>;
参数
参数类型
message对象
message.user用户
返回值

Awaitable<void>

linkAccount()?
optional linkAccount: (message) => Awaitable<void>;
参数
参数类型
message对象
message.account帐户
message.profileUser | AdapterUser
message.userUser | AdapterUser
返回值

Awaitable<void>

session()?
optional session: (message) => Awaitable<void>;

消息对象将包含以下内容之一,具体取决于您使用 JWT 还是数据库持久化会话

  • token: 此会话的 JWT。
  • session: 来自您适配器的会话对象。
参数
参数类型
message对象
message.session会话
message.tokenJWT
返回值

Awaitable<void>

signIn()?
optional signIn: (message) => Awaitable<void>;

如果使用 credentials 类型的身份验证,则用户是您凭据提供程序返回的原始响应。对于其他提供程序,您将从适配器、帐户和一个指示用户是否为适配器的新用户的指标中获取用户对象。

参数
参数类型
message对象
message.account?null | Account
message.isNewUser?布尔值
message.profile?Profile
message.user用户
返回值

Awaitable<void>

signOut()?
optional signOut: (message) => Awaitable<void>;

消息对象将包含以下内容之一,具体取决于您使用 JWT 还是数据库持久化会话

  • token: 此会话的 JWT。
  • session: 来自您适配器的即将结束的会话对象。
参数
参数类型
message{ session: undefined | null | void | AdapterSession; } | { token: null | JWT; }
返回值

Awaitable<void>

updateUser()?
optional updateUser: (message) => Awaitable<void>;
参数
参数类型
message对象
message.user用户
返回值

Awaitable<void>

继承自

Omit.events

experimental?

optional experimental: {
  enableWebAuthn: boolean;
};

使用此选项启用实验性功能。启用后,它将向控制台打印警告消息。

注意

实验性功能不保证稳定,可能会在未经通知的情况下更改或删除。请谨慎使用。

默认值
{}
enableWebAuthn?
optional enableWebAuthn: boolean;

启用 WebAuthn 支持。

默认值
false
继承自

Omit.experimental

jwt?

optional jwt: Partial<JWTOptions>;

如果您没有指定 AuthConfig.adapter,则默认情况下会启用 JSON Web 令牌。JSON Web 令牌默认情况下是加密的 (JWE)。我们建议您保持这种行为。

继承自

Omit.jwt

logger?

optional logger: Partial<LoggerInstance>;

覆盖任何日志记录级别(undefined 级别将使用内置日志记录器),并在 NextAuth 中拦截日志。您可以使用此选项将 NextAuth 日志发送到第三方日志记录服务。

示例
// /auth.ts
import log from "logging-service"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  logger: {
    error(code, ...message) {
      log.error(code, message)
    },
    warn(code, ...message) {
      log.warn(code, message)
    },
    debug(code, ...message) {
      log.debug(code, message)
    }
  }
})
默认值
console
继承自

Omit.logger

页面?

optional pages: Partial<PagesOptions>;

如果您想创建自定义登录、注销和错误页面,请指定要使用的 URL。指定的页面将覆盖相应的内置页面。

默认值
{}
示例
  pages: {
    signIn: '/auth/signin',
    signOut: '/auth/signout',
    error: '/auth/error',
    verifyRequest: '/auth/verify-request',
    newUser: '/auth/new-user'
  }
继承自

Omit.pages

提供者

providers: Provider[];

用于登录的身份验证提供者列表(例如 Google、Facebook、Twitter、GitHub、电子邮件等),按任意顺序。这可以是内置提供者之一,也可以是具有自定义提供者的对象。

默认值
[]
继承自

Omit.providers

redirectProxyUrl?

optional redirectProxyUrl: string;

设置后,在 OAuth 登录流程期间,授权请求的 redirect_uri 将基于此值设置。

如果您 OAuth 提供者只支持单个 redirect_uri 或者您想在预览 URL(例如 Vercel)上使用 OAuth,那么这很有用,因为您事先不知道最终的部署 URL。

该 URL 需要包含直至 Auth.js 初始化位置的完整路径。

注意

这将自动启用 state OAuth2Config.checks 在提供者上。

示例
"https://authjs.example.com/api/auth"

您也可以为每个提供者单独覆盖此项。

示例
GitHub({
  ...
  redirectProxyUrl: "https://github.example.com/api/auth"
})
默认值

AUTH_REDIRECT_PROXY_URL 环境变量

另请参阅:指南:保护预览部署

继承自

Omit.redirectProxyUrl

secret?

optional secret: string | string[];

用于散列令牌、签名 cookie 和生成加密密钥的随机字符串。

要生成随机字符串,您可以使用 Auth.js CLI:npx auth secret

注意

您还可以传递一个密钥数组,在这种情况下,第一个成功解密 JWT 的密钥将被使用。这对于在不使现有会话失效的情况下轮换密钥很有用。较新的密钥应添加到数组的开头,这将用于所有新会话。

继承自

Omit.secret

session?

optional session: {
  generateSessionToken: () => string;
  maxAge: number;
  strategy: "jwt" | "database";
  updateAge: number;
};

配置您的会话,例如,如果您想使用 JWT 或数据库,空闲会话过期之前需要多长时间,或者如果您使用的是数据库,如何限制写入操作。

generateSessionToken()?
optional generateSessionToken: () => string;

为基于数据库的会话生成自定义会话令牌。默认情况下,根据 Node.js 版本生成随机 UUID 或字符串。但是,您可以指定自己的自定义字符串(例如 CUID)来使用。

默认值

randomUUIDrandomBytes.toHex 取决于 Node.js 版本

返回

string

maxAge?
optional maxAge: number;

从现在开始的会话过期时间(以秒为单位)

默认值
2592000 // 30 days
strategy?
optional strategy: "jwt" | "database";

选择要如何保存用户会话。默认值为 "jwt",即会话 cookie 中的加密 JWT (JWE)。

但是,如果您使用的是 adapter,我们将将其默认设置为 "database"。您仍然可以通过显式定义 "jwt" 来强制执行 JWT 会话。

当使用 "database" 时,会话 cookie 将只包含 sessionToken 值,该值用于在数据库中查找会话。

文档 | 适配器 | 关于 JSON Web 令牌

updateAge?
optional updateAge: number;

会话应以秒为单位更新的频率。如果设置为 0,则每次都会更新会话。

默认值
86400 // 1 day
继承自

Omit.session

skipCSRFCheck?

optional skipCSRFCheck: typeof skipCSRFCheck;
继承自

Omit.skipCSRFCheck

theme?

optional theme: Theme;

更改内置的 AuthConfig.pages 的主题。

继承自

Omit.theme

trustHost?

optional trustHost: boolean;

Auth.js 依赖于传入请求的 host 标头才能正常工作。因此,此属性需要设置为 true

确保您的部署平台安全地设置了 host 标头。

官方的基于 Auth.js 的库将尝试为已知安全地设置 host 标头的一些部署平台(例如:Vercel)自动设置此值。

继承自

Omit.trustHost

useSecureCookies?

optional useSecureCookies: boolean;

当设置为 true 时,NextAuth.js 设置的所有 cookie 只能从 HTTPS URL 访问。此选项在以 http:// 开头的 URL(例如 https://127.0.0.1:3000)上默认为 false,以方便开发人员。您可以手动将此选项设置为 false 来禁用此安全功能并允许从非安全 URL 访问 cookie(不建议这样做)。

  • 这是一个高级选项。高级选项与基本选项的传递方式相同,但可能具有复杂的影响或副作用。您应该尽量避免使用高级选项,除非您对使用它们非常熟悉。

默认值为 HTTP 的 false 和 HTTPS 站点的 true

继承自

Omit.useSecureCookies


LiteralUnion<T, U>

type LiteralUnion<T, U>: T | U & Record<never, never>;

类型参数

类型参数
T 扩展 U-
Ustring
Auth.js © Balázs Orbán 和团队 -2024