Melody AuthMelody Auth
  • English
  • zh-CN
  • English
  • zh-CN
  • Vue SDK

Vue SDK

安装

npm install @melody-auth/vue --save

AuthProvider

将你的应用包裹在 AuthProvider 组件内,为应用中的其他组件提供认证上下文。

参数类型描述默认值必填
clientIdstring前端所连接的 app clientIdN/A是
redirectUristring认证成功后重定向的 URLN/A是
serverUristring托管认证服务器的 URLN/A是
scopesstring[]需要申请的权限作用域N/A否
storage'sessionStorage' | 'localStorage'用于存储认证令牌的存储类型'localStorage'否
onLoginSuccess(attr: { locale?: string; state?: string }) => void登录成功后执行的回调函数N/A否
import { createApp } from 'vue'
import { AuthProvider } from '@melody-auth/vue'
import App from './App.vue'

const app = createApp(App)

app.use(
  AuthProvider,
  {
    clientId: import.meta.env.VITE_AUTH_SPA_CLIENT_ID,
    redirectUri: import.meta.env.VITE_CLIENT_URI,
    serverUri: import.meta.env.VITE_AUTH_SERVER_URI,
    storage: 'localStorage',
  },
)

app.mount('#app')

isAuthenticated

用于判断当前用户是否已通过认证。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { isAuthenticating, isAuthenticated } = useAuth()
</script>

<template>
  <div v-if="isAuthenticating">
    <Spinner />
  </div>
  <div v-else>
    <button v-if="isAuthenticated">
      登出
    </button>
    <button v-else>
      登录
    </button>
  </div>
</template>

loginRedirect

通过浏览器重定向的方式开启新的认证流程。

参数类型描述默认值必填
localestring指定认证流程使用的语言N/A否
statestring若不使用自动生成的随机串,可自定义 state 参数N/A否
policystring指定要使用的策略'sign_in_or_sign_up'否
orgstring指定要使用的组织,值为组织的 slugN/A否
<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { loginRedirect } = useAuth()

function handleLogin() {
  loginRedirect({ locale: 'en' })
}
</script>

<template>
  <button @click="handleLogin">
    登录
  </button>
</template>

loginPopup

在弹窗中开启新的认证流程。

参数类型描述默认值必填
localestring指定认证流程使用的语言N/A否
statestring若不使用自动生成的随机串,可自定义 state 参数N/A否
orgstring指定要使用的组织,值为组织的 slugN/A否
<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { loginPopup } = useAuth()

function handleLogin() {
  loginPopup({
    locale: 'en',
    state: JSON.stringify({ info: Math.random() })
  })
}
</script>

<template>
  <button @click="handleLogin">
    登录
  </button>
</template>

logoutRedirect

触发退出登录流程。

参数类型描述默认值必填
postLogoutRedirectUristring退出后跳转的 URLN/A否
<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { logoutRedirect } = useAuth()

function handleLogout() {
  logoutRedirect({ postLogoutRedirectUri: 'http://localhost:3000/' })
}
</script>

<template>
  <button @click="handleLogout">
    登出
  </button>
</template>

acquireToken

获取用户的 accessToken,若已过期则自动刷新。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { acquireToken } = useAuth()

async function handleFetchUserInfo() {
  const accessToken = await acquireToken()
  // 使用 accessToken 获取受保护资源
  await fetch('/...', {
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
  })
}
</script>

<template>
  <button @click="handleFetchUserInfo">
    获取用户信息
  </button>
</template>

acquireUserInfo

从认证服务器获取当前用户的公开信息。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { acquireUserInfo } = useAuth()

async function handleFetchUserInfo() {
  const userInfo = await acquireUserInfo()
}
</script>

<template>
  <button @click="handleFetchUserInfo">
    获取用户信息
  </button>
</template>

userInfo

当前用户信息。在访问 userInfo 之前,请先调用 acquireUserInfo。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { userInfo } = useAuth()
</script>

<template>
  <div>
    <pre>{{ JSON.stringify(userInfo) }}</pre>
  </div>
</template>

isAuthenticating

指示 SDK 是否正在初始化并尝试获取用户认证状态。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { isAuthenticating } = useAuth()
</script>

<template>
  <div v-if="isAuthenticating">
    <Spinner />
  </div>
</template>

isLoadingToken

指示 SDK 是否正在获取或刷新令牌。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { isLoadingToken } = useAuth()
</script>

<template>
  <div v-if="isLoadingToken">
    <Spinner />
  </div>
</template>

isLoadingUserInfo

指示 SDK 是否正在获取用户信息。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { isLoadingUserInfo } = useAuth()
</script>

<template>
  <div v-if="isLoadingUserInfo">
    <Spinner />
  </div>
</template>

authenticationError

指示是否发生了与认证流程相关的错误。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { authenticationError } = useAuth()
</script>

<template>
  <div v-if="authenticationError">
    <Alert message="Authentication error" />
  </div>
</template>

acquireTokenError

指示是否发生了与 acquireToken 流程相关的错误。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { acquireTokenError } = useAuth()
</script>

<template>
  <div v-if="acquireTokenError">
    <Alert message="Acquire token error" />
  </div>
</template>

acquireUserInfoError

指示是否发生了与 acquireUserInfo 流程相关的错误。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { acquireUserInfoError } = useAuth()
</script>

<template>
  <div v-if="acquireUserInfoError">
    <Alert message="Acquire user info error" />
  </div>
</template>

idToken

当前用户的 id_token。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { idToken } = useAuth()
</script>

<template>
  <div>
    <pre>{{ idToken }}</pre>
  </div>
</template>

account

从 id_token 解码得到的账户信息。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { account } = useAuth()
</script>

<template>
  <div>
    <pre>{{ account }}</pre>
  </div>
</template>

loginError

指示是否发生了与登录流程相关的错误。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { loginError } = useAuth()
</script>

<template>
  <div v-if="loginError">
    <Alert message="Login error" />
  </div>
</template>

logoutError

指示是否发生了与退出流程相关的错误。

<script setup lang="ts">
import { useAuth } from '@melody-auth/vue'
const { logoutError } = useAuth()
</script>

<template>
  <div v-if="logoutError">
    <Alert message="Logout error" />
  </div>
</template>
最近更新:: 2025/6/1 02:26
Contributors: Baozier