Melody AuthMelody Auth
  • 认证服务器设置
  • 管理面板设置
  • 邮箱提供商设置
  • 短信提供商设置
  • 外部身份提供商

    • 社交登录提供商设置
    • OIDC SSO 设置
    • SAML SSO 设置
  • 主要功能

    • 身份认证
    • JWT & JWKS
    • 多重认证(MFA)
    • 角色权限控制(RBAC)
    • 策略(policy)
    • 组织(organization)
  • 其他功能

    • 用户属性
    • 应用横幅
    • 组织分组
    • 模拟登录
    • 日志管理
  • 定制化

    • 认证服务器配置
    • 品牌与主题
    • 语言本地化
  • 前端 SDK

    • React SDK
    • Angular SDK
    • Vue SDK
    • Web SDK
  • 后端 API

    • 服务间认证 API 设置
    • 服务间认证 API Swagger
    • 嵌入式认证 API 设置
    • 嵌入式认证 API Swagger
  • 部署流水线
  • 轮换 JWT 密钥
  • English
  • zh-CN
  • 认证服务器设置
  • 管理面板设置
  • 邮箱提供商设置
  • 短信提供商设置
  • 外部身份提供商

    • 社交登录提供商设置
    • OIDC SSO 设置
    • SAML SSO 设置
  • 主要功能

    • 身份认证
    • JWT & JWKS
    • 多重认证(MFA)
    • 角色权限控制(RBAC)
    • 策略(policy)
    • 组织(organization)
  • 其他功能

    • 用户属性
    • 应用横幅
    • 组织分组
    • 模拟登录
    • 日志管理
  • 定制化

    • 认证服务器配置
    • 品牌与主题
    • 语言本地化
  • 前端 SDK

    • React SDK
    • Angular SDK
    • Vue SDK
    • Web SDK
  • 后端 API

    • 服务间认证 API 设置
    • 服务间认证 API Swagger
    • 嵌入式认证 API 设置
    • 嵌入式认证 API Swagger
  • 部署流水线
  • 轮换 JWT 密钥
  • English
  • zh-CN
  • Web SDK

Web SDK

Web SDK 可让你将 Melody Auth 集成到使用原生 JavaScript 的 Web 应用程序中。

安装

npm install @melody-auth/web --save

配置

Web SDK 的函数接受一个共享的配置对象。

参数类型描述默认值必填
clientIdstring前端连接的认证 clientIdN/A是
redirectUristring用户成功认证后重定向的 URLN/A是
serverUristring你托管 melody auth 服务器的 URLN/A是
scopesstring[]请求用户访问权限的范围N/A否
storage'sessionStorage' | 'localStorage'存储认证 token 的类型'localStorage'否
import {
  triggerLogin,
  loadCodeAndStateFromUrl,
  exchangeTokenByAuthCode,
  exchangeTokenByRefreshToken,
  getUserInfo,
  logout,
} from '@melody-auth/web'

const config = {
  clientId: '<CLIENT_ID>',
  redirectUri: '<CLIENT_REDIRECT_URI>',
  serverUri: '<AUTH_SERVER_URI>',
  // 可选
  scopes: ['openid', 'profile'],
  storage: 'localStorage',
}

loginRedirect

通过重定向到认证服务器启动一个新的认证流程。

参数类型描述默认值必填
localestring指定认证流程中使用的语言环境N/A否
statestring指定认证流程中使用的 state,如果不想使用随机生成的字符串N/A否
policystring指定认证流程中使用的策略'sign_in_or_sign_up'否
orgstring指定认证流程中使用的组织,值应为组织的 slugN/A否
await triggerLogin('redirect', config, {
  locale: 'en',
  // state: 'your-predictable-state',
  // policy: 'sign_in_or_sign_up',
  // org: 'your-org-slug',
})

loginPopup

在弹窗中启动一个新的认证流程。当用户完成认证时,你的 authorizePopupHandler 会被调用,并传入 { state, code }。你必须用该 code 来交换 token。

参数类型描述默认值必填
localestring指定认证流程中使用的语言环境N/A否
statestring指定认证流程中使用的 state,如果不想使用随机生成的字符串N/A否
policystring指定认证流程中使用的策略'sign_in_or_sign_up'否
orgstring指定认证流程中使用的组织,值应为组织的 slugN/A否
authorizePopupHandler(data: { state: string; code: string }) => void弹窗返回认证 code 时调用的处理器N/A否
await triggerLogin('popup', config, {
  locale: 'en',
  authorizePopupHandler: async ({ state, code }) => {
    await exchangeTokenByAuthCode(code, state, config)
    // token 已处理(见下文说明)
  },
})

handleRedirectCallback

当用户通过重定向从认证服务器返回时,从 URL 中读取 code 和 state,并用它们交换 token。

const { code, state } = loadCodeAndStateFromUrl()
await exchangeTokenByAuthCode(code, state, config)

存储内容

成功调用 exchangeTokenByAuthCode 后:

  • refresh token 和 id token 会使用配置的存储方式保存,键分别为 StorageKey.RefreshToken 和 StorageKey.IdToken。
  • access token 会从交换函数返回,但不会被持久化。需要立即使用,或者之后通过 refresh token 重新获取。

acquireToken

在需要时使用已存储的 refresh token 获取新的 access token。

import { getStorage, StorageKey } from '@melody-auth/shared'

const storage = getStorage(config.storage)
const refreshTokenRaw = storage.getItem(StorageKey.RefreshToken)
const refreshToken = refreshTokenRaw && JSON.parse(refreshTokenRaw).refreshToken

if (!refreshToken) throw new Error('No refresh token found')

const { accessToken, expiresIn, expiresOn } = await exchangeTokenByRefreshToken(
  config,
  refreshToken,
)

acquireUserInfo

使用有效的 access token 从认证服务器获取用户的公开信息。

const userInfo = await getUserInfo(config, { accessToken })

logoutRedirect

注销用户。当 localOnly 为 false 且存在 refresh token 时,会先发送远程注销请求以获取注销后的重定向地址。然后清除本地 token 并重定向浏览器。

参数类型描述
postLogoutRedirectUristring用户注销后重定向的 URL
localOnlyboolean如果为 true,则只清除本地 token 并重定向,不进行远程注销
import { getStorage, StorageKey } from '@melody-auth/shared'

const storage = getStorage(config.storage)
const idTokenRaw = storage.getItem(StorageKey.IdToken)
const refreshTokenRaw = storage.getItem(StorageKey.RefreshToken)
const accessToken = /* obtain via exchangeTokenByRefreshToken(...) */
const refreshToken = refreshTokenRaw && JSON.parse(refreshTokenRaw).refreshToken

await logout(
  config,
  accessToken ?? '',
  refreshToken ?? null,
  'http://localhost:3000/',
  false, // 设置为 true 跳过远程注销
)

示例应用

查看使用 Web SDK 的最简 Vite 示例:https://github.com/ValueMelody/melody-auth-examples/tree/main/vite-web-example。

最近更新: 2025/8/10 01:30
Contributors: Baozier