next-auth-oauth
Version:
`next-auth-oauth` 是一个基于 Next.js 和 NextAuth 的增强插件,用于简化和增强授权登录的处理。该插件提供了丰富的功能,包括第三方登录绑定、账户管理等,使得授权流程更加高效和灵活。
128 lines (120 loc) • 3.05 kB
text/typescript
import type { Account, NextAuthConfig, NextAuthResult } from 'next-auth'
import type { AdapterUser } from 'next-auth/adapters'
import type { OAuthProviderButtonStyles } from 'next-auth/providers'
type CallbacksType = NonNullable<NextAuthConfig['callbacks']>
export type CallbackSignInFunction = NonNullable<CallbacksType['signIn']>
export type CallbackSessionInFunction = NonNullable<CallbacksType['session']>
export type CallbackJwtFunction = NonNullable<CallbacksType['jwt']>
type Tail<T extends unknown[]> = T extends [unknown, ...infer Rest]
? Rest
: never
export type { NextAuthConfig }
export type BindoAuthAccountInfo = {
user: AdapterUser | null
bindAccount: boolean
account: Account | null
}
export type NextAuthResultType = NextAuthResult & {
/**
* 列出当前第三方账号的列表
*/
oauthProviders: Array<{
id: string
name: string
style: OAuthProviderButtonStyles
}>
/**
* 列出当前绑定的第三方账号
* @returns
*/
listAccount: () => Promise<
Array<{
type: string
id: string
provider: string
providerAccountId: string
}>
>
/**
* 注册账号
* @param formData
* @returns
*/
signUp: (formData: FormData & { redirectTo?: string }) => Promise<void>
/**
* 注册账号 并尝试绑定第三方账户
* @param formData
* @returns
*/
signUpAndBindAccount: (
formData: FormData & { redirectTo?: string },
) => Promise<void>
/**
* 绑定UI:账号表单登录,可以自动读取缓存账号并进行绑定登录
*/
signInAndBindAccount: (
options: Parameters<NextAuthResult['signIn']>[1],
authorizationParams?: Parameters<NextAuthResult['signIn']>[2],
) => ReturnType<NextAuthResult['signIn']>
/**
*NextAuthResult['signIn']
* @returns 获得cookie缓存的第三方账号信息
*/
tempOauthUser: () => Promise<BindoAuthAccountInfo>
}
export interface DBAdapterUser extends Omit<AdapterUser, 'email'> {
/**
* 邮箱
*/
email?: string
/**
* 手机
*/
mobile?: string
/**
* 账号名
*/
username: string
}
// 账号登录
export interface IUserService {
/**
* 实现登录
* @param username 账号/邮箱/密码
* @param password 密码/验证码
* @param type 登录类型,可以是password或者mobile
*/
login(
username: string,
password: string,
type?: 'password' | 'mobile',
): Promise<DBAdapterUser>
/**
* 注册账号
* @param user
*/
registUser(user: {
username: string
password: string
/**
* 表单提交的数据,比如:
* @param nickname:string, //昵称
* @param email:string, //邮箱
* @param mobile:string, //手机
*/
formData: Record<string, string>
/* 支持其他参数 */
}): Promise<DBAdapterUser>
/**
* 绑定的第三方授权信息
* @param userId
*/
listAccount(userId: string): Promise<
Array<{
type: string
id: string
provider: string
providerAccountId: string
}>
>
}