路线守卫

路由防护允许您通过身份验证检查、授权或其他自定义逻辑来保护路由。

警卫可以完全阻止导航或将用户重定向到不同的位置。


保护返回值

保护函数可以返回:


全球卫士

全局守卫在任何特定于路线的守卫之前在_每个_导航事件上执行。

typescript
function registerGlobalGuard(
    guard: (
        pathname: string,
        query: Record<string, unknown>,
        data: Record<string, unknown>
    ) => boolean | string | Promise<boolean | string>
): void

示例

javascript
import { registerGlobalGuard } from '@beforesemicolon/router'

// Authentication guard
registerGlobalGuard((pathname, query, state) => {
    const publicPages = ['/login', '/register', '/404']

    if (!publicPages.includes(pathname) && !userIsLoggedIn()) {
        return '/login' // Redirect to login
    }

    return true // Allow navigation
})

特定路线的守卫

仅当导航到与注册模式匹配的路径时,特定于路线的防护才会运行。

typescript
function registerRouteGuard(
    pattern: string,
    guard: (
        pathname: string,
        query: Record<string, unknown>,
        data: Record<string, unknown>
    ) => boolean | string | Promise<boolean | string>
): void

示例

javascript
import { registerRouteGuard } from '@beforesemicolon/router'

// Role-based authorization guard (Async)
registerRouteGuard('/admin/:section', async (pathname, query, state) => {
    try {
        const hasAccess = await checkAdminPermissions()
        return hasAccess ? true : '/unauthorized'
    } catch {
        return false // Block navigation on error
    }
})

警卫处决令

  1. 全局守卫: 按照注册顺序执行。
  2. 特定于路线的守卫: 按照注册的顺序执行。
  3. 返回 false 或重定向 string 的_first_守卫立即停止执行;随后的守卫将被跳过。
编辑此文档