next-auth
如果您想从 v4 迁移,请访问 升级指南 (v5).
安装
npm install next-auth@beta环境变量推断
NEXTAUTH_URL 和 NEXTAUTH_SECRET 自 v4 起已被推断。
自 NextAuth.js v5 起,还可以自动推断以 AUTH_ 为前缀的环境变量。
例如,AUTH_GITHUB_ID 和 AUTH_GITHUB_SECRET 将用作 GitHub 提供商的 clientId 和 clientSecret 选项。
环境变量名称推断对 OAuth 提供商具有以下格式:AUTH_{PROVIDER}_{ID|SECRET}。
PROVIDER 是提供商 ID 的大写蛇形版本,后面分别跟着 ID 或 SECRET。
AUTH_SECRET 和 AUTH_URL 也分别为 NEXTAUTH_SECRET 和 NEXTAUTH_URL 设定别名,以保持一致性。
要向您的应用程序添加社交登录,配置将变为
import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"
export const { handlers, auth } = NextAuth({ providers: [ GitHub ] })以及 .env.local 文件
AUTH_GITHUB_ID=...
AUTH_GITHUB_SECRET=...
AUTH_SECRET=...在生产环境中,AUTH_SECRET 是必需的环境变量 - 如果未设置,NextAuth.js 将抛出错误。有关更多详细信息,请参阅 MissingSecretError。
如果您需要覆盖提供商的默认值,您仍然可以像以前一样将其作为函数 GitHub({...}) 调用。
延迟初始化
您也可以延迟初始化 NextAuth.js(以前称为高级初始化),这允许您在某些情况下(例如,路由处理程序、中间件、API 路由或 getServerSideProps)在配置中访问请求上下文。上面的示例将变为
import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"
export const { handlers, auth } = NextAuth(req => {
if (req) {
console.log(req) // do something with the request
}
return { providers: [ GitHub ] }
})这在您想根据请求定制配置时很有用,例如,在暂存/开发环境中添加不同的提供商。
AuthError
所有 Auth.js 错误的基类错误。它经过优化,可以通过 logger.error 选项以格式良好的方式在服务器日志中打印。
扩展
构造函数
new AuthError(message, errorOptions)
new AuthError(message?, errorOptions?): AuthError参数
| 参数 | 类型 |
|---|---|
message? | string | ErrorOptions |
errorOptions? | ErrorOptions |
返回
覆盖
Error.constructor
属性
cause?
optional cause: Record<string, unknown> & {
err: Error;
};类型声明
err?
optional err: Error;覆盖
Error.cause
message
message: string;继承自
Error.message
name
name: string;继承自
Error.name
堆栈?
optional stack: string;继承自
Error.stack
类型
type: ErrorType;错误类型。用于识别日志中的错误。
prepareStackTrace()?
static optional prepareStackTrace: (err, stackTraces) => any;用于格式化堆栈跟踪的可选重写。
参见
https://v8.node.org.cn/docs/stack-trace-api#customizing-stack-traces
参数
| 参数 | 类型 |
|---|---|
err | Error |
stackTraces | CallSite[] |
返回
任何
继承自
Error.prepareStackTrace
stackTraceLimit
static stackTraceLimit: number;继承自
Error.stackTraceLimit
方法
captureStackTrace()
static captureStackTrace(targetObject, constructorOpt?): void在目标对象上创建 .stack 属性
参数
| 参数 | 类型 |
|---|---|
targetObject | 对象 |
constructorOpt? | 函数 |
返回
空
继承自
Error.captureStackTrace
CredentialsSignin
可以从 Credentials 提供程序的 authorize 回调中抛出。当在 authorize 回调期间发生错误时,可能会发生两件事
- 用户被重定向到登录页面,URL 中包含
error=CredentialsSignin&code=credentials。code是可配置的。 - 如果您在处理服务器端表单操作的框架中抛出此错误,则会抛出此错误,而不是重定向用户,因此您需要进行处理。
扩展
构造函数
new CredentialsSignin(message, errorOptions)
new CredentialsSignin(message?, errorOptions?): CredentialsSignin参数
| 参数 | 类型 |
|---|---|
message? | string | ErrorOptions |
errorOptions? | ErrorOptions |
返回
继承自
属性
cause?
optional cause: Record<string, unknown> & {
err: Error;
};类型声明
err?
optional err: Error;继承自
code
code: string;在重定向 URL 的 code 查询参数中设置的错误代码。
⚠ 注意:此属性将包含在 URL 中,因此请确保它不提示敏感错误。
如果需要调试,完整的错误始终记录在服务器上。
通常,我们不建议专门提示用户是否有错误的用户名或密码,而建议尝试使用类似“无效凭据”的内容。
message
message: string;继承自
name
name: string;继承自
stack?
optional stack: string;继承自
type
type: ErrorType;错误类型。用于识别日志中的错误。
继承自
kind
static kind: string;继承自
prepareStackTrace()?
static optional prepareStackTrace: (err, stackTraces) => any;用于格式化堆栈跟踪的可选重写。
参见
https://v8.node.org.cn/docs/stack-trace-api#customizing-stack-traces
参数
| 参数 | 类型 |
|---|---|
err | Error |
stackTraces | CallSite[] |
返回
任何
继承自
stackTraceLimit
static stackTraceLimit: number;继承自
type
static type: string;方法
captureStackTrace()
static captureStackTrace(targetObject, constructorOpt?): void在目标对象上创建 .stack 属性
参数
| 参数 | 类型 |
|---|---|
targetObject | 对象 |
constructorOpt? | 函数 |
返回
空
继承自
账户
通常包含有关正在使用的提供程序的信息,并且还扩展了 TokenSet,它是 OAuth 提供程序返回的不同令牌。
扩展
Partial<TokenEndpointResponse>
属性
access_token?
optional readonly access_token: string;继承自
Partial.access_token
authorization_details?
optional readonly authorization_details: AuthorizationDetails[];继承自
Partial.authorization_details
expires_at?
optional expires_at: number;基于 TokenEndpointResponse.expires_in 计算的值。
它是 TokenEndpointResponse.access_token 过期的绝对时间戳(以秒为单位)。
此值可用于实现令牌轮换以及 TokenEndpointResponse.refresh_token。
参见
- https://authjs.oauth.ac.cn/guides/refresh-token-rotation#database-strategy
- https://www.rfc-editor.org/rfc/rfc6749#section-5.1
expires_in?
optional readonly expires_in: number;继承自
Partial.expires_in
id_token?
optional readonly id_token: string;继承自
Partial.id_token
provider
provider: string;此帐户的提供程序 ID。例如“google”。有关完整列表,请参见 https://authjs.oauth.ac.cn/reference/core/providers
providerAccountId
providerAccountId: string;此值取决于用于创建帐户的提供程序类型。
- oauth/oidc:OAuth 帐户的 ID,从
profile()回调中返回。 - 电子邮件:用户的电子邮件地址。
- 凭据:从
authorize()回调中返回的id
refresh_token?
optional readonly refresh_token: string;继承自
Partial.refresh_token
scope?
optional readonly scope: string;继承自
Partial.scope
token_type?
optional readonly token_type: Lowercase<string>;注意:因为值不区分大小写,所以它总是以小写形式返回
继承自
Partial.token_type
type
type: ProviderType;此帐户的提供程序类型
userId?
optional userId: string;此帐户所属用户的 ID
参见
https://authjs.oauth.ac.cn/reference/core/adapters#adapteruser
DefaultSession
扩展自
属性
expires
expires: string;user?
optional user: User;NextAuthConfig
配置 NextAuth.js。
扩展
Omit<AuthConfig,"raw">
属性
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>;
} & {
authorized: (params) => any;
};回调是异步函数,您可以使用它们来控制执行身份验证相关操作时会发生什么。回调**允许您在没有数据库的情况下实现访问控制**,或**与外部数据库或 API 集成**。
类型声明
jwt()?
optional jwt: (params) => Awaitable<null | JWT>;每当创建 JSON Web Token(例如在登录时)或更新 JSON Web Token(例如在客户端访问会话时)时,都会调用此回调。您在此处返回的任何内容都将保存在 JWT 中并转发到会话回调。在那里您可以控制应该返回给客户端的内容。其他任何内容都将被保留在您的前端。JWT 默认情况下通过您的 AUTH_SECRET 环境变量进行加密。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
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.token | JWT | 当 trigger 为 "signIn" 或 "signUp" 时,它将是 JWT 的子集,name、email 和 image 将被包含在内。否则,它将是后续调用的完整 JWT。 |
params.trigger? | "signIn" | "update" | "signUp" | 检查 jwt 回调被调用的原因。可能的原因是 - 用户登录:回调第一次被调用, user、profile 和 account 将存在。- 用户注册:在数据库中第一次创建用户(当 AuthConfig.session.strategy 设置为 "database" 时)- 更新事件:由 useSession().update 方法触发。在后一种情况下, trigger 将为 undefined。 |
params.user | AdapterUser | User | OAuthConfig.profile 或 CredentialsConfig.authorize 回调的结果之一。 注意 在 trigger 为 "signIn" 或 "signUp" 时可用。资源 - 凭据提供者 - 用户数据库模型 |
返回
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.baseUrl | 字符串 | 站点的默认基本 URL(可以用作回退) |
params.url | 字符串 | 客户端提供的回调 URL |
返回
Awaitable<string>
session()?
optional session: (params) => Awaitable<Session | DefaultSession>;每当检查会话时都会调用此回调。(例如,当调用 /api/session 端点、使用 useSession 或 getSession 时)。返回值将暴露给客户端,因此请谨慎返回您在此处返回的内容!如果您想向客户端提供通过 JWT 回调添加到令牌的任何内容,您也必须在此处明确返回它。
⚠ 默认情况下,出于安全考虑,只返回令牌的子集(电子邮件、姓名、图像)。
token 参数仅在使用 jwt 会话策略时可用,而 user 参数仅在使用数据库会话策略时可用。
示例
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,其消息设置为原始错误。
示例
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.user | AdapterUser | User | - |
返回
Awaitable<string | boolean>
类型声明
authorized()?
optional authorized: (params) => any;当用户需要授权时调用,使用 中间件。
您可以通过返回 NextResponse 来覆盖此行为。
示例
async authorized({ request, auth }) {
const url = request.nextUrl
if(request.method === "POST") {
const { authToken } = (await request.json()) ?? {}
// If the request has a valid auth token, it is authorized
const valid = await validateAuthToken(authToken)
if(valid) return true
return NextResponse.json("Invalid auth token", { status: 401 })
}
// Logged in users are authenticated, otherwise redirect to login page
return !!auth.user
}如果您正在返回重定向响应,请确保您要重定向到的页面不受此回调保护,否则您可能会陷入无限重定向循环。
参数
| 参数 | 类型 | 描述 |
|---|---|---|
params | 对象 | - |
params.auth | null | Session | 已验证的用户或令牌(如果有)。 |
params.request | NextRequest | 要授权的请求。 |
返回值
任何
覆盖
Omit.callbacks
cookies?
optional cookies: Partial<CookiesOptions>;您可以覆盖 Auth.js 使用的任何 cookie 的默认 cookie 名称和选项。您可以使用自定义属性指定一个或多个 cookie,缺少的选项将使用 Auth.js 定义的默认值。如果您使用此功能,您可能需要创建条件行为来支持在开发和生产构建中设置不同的 cookie 策略,因为您将选择退出内置的动态策略。
- ⚠ 这是一个高级选项。 高级选项的传递方式与基本选项相同,但 可能会带来复杂的影响 或副作用。除非您非常熟悉使用它们,否则应 尽量避免使用高级选项。
默认
{}继承自
Omit.cookies
debug?
optional debug: boolean;将 debug 设置为 true 以启用身份验证和数据库操作的调试消息。
- ⚠ 如果您添加了自定义 AuthConfig.logger,则此设置将被忽略。
默认
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 Token 的内容以及与事件相关的其他信息。
默认
{}createUser()?
optional createUser: (message) => Awaitable<void>;参数
| 参数 | 类型 |
|---|---|
message | 对象 |
message.user | User |
返回值
Awaitable<void>
linkAccount()?
optional linkAccount: (message) => Awaitable<void>;参数
| 参数 | 类型 |
|---|---|
message | 对象 |
message.account | Account |
message.profile | AdapterUser | User |
message.user | AdapterUser | User |
返回值
Awaitable<void>
session()?
optional session: (message) => Awaitable<void>;消息对象将包含以下内容之一,具体取决于您使用 JWT 或数据库持久化会话
token: 此会话的 JWT。session: 来自您的适配器的会话对象。
参数
| 参数 | 类型 |
|---|---|
message | 对象 |
message.session | Session |
message.token | JWT |
返回值
Awaitable<void>
signIn()?
optional signIn: (message) => Awaitable<void>;如果使用 credentials 类型的身份验证,则用户是您凭据提供程序的原始响应。对于其他提供者,您将从您的适配器、帐户和一个指示用户是否为您的适配器的新用户的指标中获得 User 对象。
参数
| 参数 | 类型 |
|---|---|
message | 对象 |
message.account? | null | Account |
message.isNewUser? | 布尔值 |
message.profile? | Profile |
message.user | 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 | 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 Tokens。JSON Web Tokens 默认情况下是加密的(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)
}
}
})- ⚠ 设置后,AuthConfig.debug 选项将被忽略
默认
console继承自
Omit.logger
pages?
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
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)来使用。
默认
randomUUID 或 randomBytes.toHex,具体取决于 Node.js 版本
返回
字符串
maxAge?
optional maxAge: number;从现在起以秒为单位的相对时间,表示会话何时过期
默认
2592000 // 30 daysstrategy?
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://:3000)上默认为 false,以方便开发人员。您可以手动将此选项设置为 false 来禁用此安全功能并允许从非安全 URL 访问 cookie(不建议这样做)。
- ⚠ 这是一个高级选项。 高级选项的传递方式与基本选项相同,但 可能会带来复杂的影响 或副作用。除非您非常熟悉使用它们,否则应 尽量避免使用高级选项。
默认值为 HTTP 为 false,HTTPS 站点为 true。
继承自
Omit.useSecureCookies
NextAuthResult
调用 NextAuth(使用 NextAuthConfig 初始化)的结果。它包含用于在 Next.js 应用程序中设置和与 NextAuth.js 交互的方法。
属性
auth
auth: (...args) => Promise<null | Session> & (...args) => Promise<null | Session> & (...args) => Promise<null | Session> & (...args) => AppRouteHandlerFn;在 Next.js 应用程序中与 NextAuth.js 交互的通用方法。在 auth.ts 中初始化 NextAuth.js 后,在中间件、服务器组件、路由处理程序(app/)以及 Edge 或 Node.js API 路由(pages/)中使用此方法。
在中间件中
将 auth 添加到中间件是可选的,但建议这样做以保持用户会话处于活动状态。
身份验证由 callbacks.authorized 回调完成。
示例
export { auth as middleware } from "./auth"或者,您可以使用 auth 包装您自己的中间件,其中 req 通过 auth 扩展
示例
import { auth } from "./auth"
export default auth((req) => {
// req.auth
})// Optionally, don't invoke Middleware on some paths
// Read more: https://nextjs.net.cn/docs/app/building-your-application/routing/middleware#matcher
export const config = {
matcher: ["/((?!api|_next/static|_next/image|favicon.ico).*)"],
}在服务器组件中
示例
import { auth } from "../auth"
export default async function Page() {
const { user } = await auth()
return <p>Hello {user?.name}</p>
}在路由处理程序中
示例
import { auth } from "../../auth"
export const POST = auth((req) => {
// req.auth
})在 Edge API 路由中
示例
import { auth } from "../../auth"
export default auth((req) => {
// req.auth
})
export const config = { runtime: "edge" }在 API 路由中
示例
import { auth } from "../auth"
import type { NextApiRequest, NextApiResponse } from "next"
export default async (req: NextApiRequest, res: NextApiResponse) => {
const session = await auth(req, res)
if (session) {
// Do something with the session
return res.json("This is protected content.")
}
res.status(401).json("You must be signed in.")
}在 getServerSideProps 中
示例
import { auth } from "../auth"
export const getServerSideProps: GetServerSideProps = async (context) => {
const session = await auth(context)
if (session) {
// Do something with the session
return { props: { session, content: (await res.json()).content } }
}
return { props: {} }
}handlers
handlers: AppRouteHandlers;NextAuth.js 路由处理程序 方法。这些用于公开 OAuth/电子邮件提供商的端点以及可以从客户端联系的 REST API 端点(例如 /api/auth/session)。
在 auth.ts 中初始化 NextAuth.js 后,重新导出这些方法。
在 app/api/auth/[...nextauth]/route.ts 中
export { GET, POST } from "../../../../auth"
export const runtime = "edge" // optional然后 auth.ts
// ...
export const { handlers: { GET, POST }, auth } = NextAuth({...})signIn()
signIn: <P, R>(provider?, options?, authorizationParams?) => Promise<R extends false ? any : never>;使用提供商登录。如果未指定提供商,用户将被重定向到登录页面。
默认情况下,用户在登录后会被重定向到当前页面。您可以通过使用相对路径设置 redirectTo 选项来覆盖此行为。
示例
import { signIn } from "../auth"
export default function Layout() {
return (
<form action={async () => {
"use server"
await signIn("github")
}}>
<button>Sign in with GitHub</button>
</form>
)如果在登录期间发生错误,将抛出 AuthError 实例。您可以像这样捕获它
import { AuthError } from "next-auth"
import { signIn } from "../auth"
export default function Layout() {
return (
<form action={async (formData) => {
"use server"
try {
await signIn("credentials", formData)
} catch(error) {
if (error instanceof AuthError) // Handle auth errors
throw error // Rethrow all other errors
}
}}>
<button>Sign in</button>
</form>
)
}类型参数
| 类型参数 | 值 |
|---|---|
P extends BuiltInProviderType | string & {} | - |
R extends boolean | true |
参数
| 参数 | 类型 | 描述 |
|---|---|---|
provider? | P | 要登录的提供商 |
options? | FormData | { redirect: R; redirectTo: string; } & Record<string, any> | - |
authorizationParams? | string | Record<string, string> | URLSearchParams | string[][] | - |
返回
Promise<R extends false ? any : never>
signOut()
signOut: <R>(options?) => Promise<R extends false ? any : never>;注销用户。如果会话是使用数据库策略创建的,则会话将从数据库中删除,并且相关 cookie 将失效。如果会话是使用 JWT 创建的,则 cookie 将失效。
默认情况下,用户在注销后会被重定向到当前页面。您可以通过使用相对路径设置 redirectTo 选项来覆盖此行为。
示例
import { signOut } from "../auth"
export default function Layout() {
return (
<form action={async () => {
"use server"
await signOut()
}}>
<button>Sign out</button>
</form>
)类型参数
| 类型参数 | 值 |
|---|---|
R extends boolean | true |
参数
| 参数 | 类型 | 描述 |
|---|---|---|
options? | 对象 | - |
options.redirect? | R | 如果设置为 false,则 signOut 方法将返回要重定向到的 URL,而不是自动重定向。 |
options.redirectTo? | 字符串 | 注销后要重定向到的相对路径。默认情况下,用户会被重定向到当前页面。 |
返回
Promise<R extends false ? any : never>
unstable_update()
unstable_update: (data) => Promise<null | Session>;参数
| 参数 | 类型 |
|---|---|
data | Partial<Session | { user: Partial<undefined | User>; }> |
返回
个人资料
从您的 OAuth 提供商返回的用户的信息。
查看
https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims
可索引
[claim: string]: unknown
属性
address?
optional address: null | {
country: null | string;
formatted: null | string;
locality: null | string;
postal_code: null | string;
region: null | string;
street_address: null | string;
};birthdate?
optional birthdate: null | string;email?
optional email: null | string;email_verified?
optional email_verified: null | boolean;family_name?
optional family_name: null | string;gender?
optional gender: null | string;given_name?
optional given_name: null | string;id?
optional id: null | string;locale?
optional locale: null | string;middle_name?
optional middle_name: null | string;name?
optional name: null | string;nickname?
optional nickname: null | string;phone_number?
optional phone_number: null | string;picture?
optional picture: any;preferred_username?
optional preferred_username: null | string;profile?
optional profile: null | string;sub?
optional sub: null | string;updated_at?
optional updated_at: null | string | number | Date;website?
optional website: null | string;zoneinfo?
optional zoneinfo: null | string;会话
已登录用户的活动会话。
扩展
属性
expires
expires: string;继承自
user?
optional user: User;继承自
用户
OAuth 提供商的 profile 回调中返回的对象的形状,在使用数据库时,可在 jwt 和 session 回调中,或 session 回调的第二个参数中使用。
扩展自
属性
email?
optional email: null | string;id?
optional id: string;image?
optional image: null | string;name?
optional name: null | string;customFetch
const customFetch: unique symbol;此选项允许您覆盖提供商用于直接向提供商的 OAuth 端点发出请求的默认 fetch 函数。使用不当会导致安全问题。
它可用于支持企业代理、自定义提取库、缓存发现端点、添加用于测试、日志记录的模拟,为不符合规范的提供商设置自定义标头/参数等。
示例
import { Auth, customFetch } from "@auth/core"
import GitHub from "@auth/core/providers/github"
const dispatcher = new ProxyAgent("my.proxy.server")
function proxy(...args: Parameters<typeof fetch>): ReturnType<typeof fetch> {
return undici(args[0], { ...(args[1] ?? {}), dispatcher })
}
const response = await Auth(request, {
providers: [GitHub({ [customFetch]: proxy })]
})查看
- https://undici.nodejs.org/#/docs/api/ProxyAgent?id=example-basic-proxy-request-with-local-agent-dispatcher
- https://authjs.oauth.ac.cn/guides/corporate-proxy
default()
default(config): NextAuthResult初始化 NextAuth.js。
参数
| 参数 | 类型 |
|---|---|
config | NextAuthConfig | (request) => Awaitable<NextAuthConfig> |
返回
示例
import NextAuth from "next-auth"
import GitHub from "@auth/core/providers/github"
export const { handlers, auth } = NextAuth({ providers: [GitHub] })延迟初始化
示例
import NextAuth from "next-auth"
import GitHub from "@auth/core/providers/github"
export const { handlers, auth } = NextAuth(async (req) => {
console.log(req) // do something with the request
return {
providers: [GitHub],
},
})