kavach
卡瓦奇-防护盔甲。SvelteKit应用程序的插入式安全性。
安装
bun add kavach @kavach/adapter-supabase
# pick the adapter for your backend
快速启动
bun add kavach @kavach/vite @kavach/adapter-supabase
# pick the adapter for your backend
创建 kavach.config.js 在你的项目根目录下:
export default {
adapter: 'supabase',
providers: [
{ name: 'google', label: 'Continue with Google' },
{ name: 'magic', mode: 'otp', label: 'Magic Link' }
],
rules: [
{ path: '/', public: true },
{ path: '/auth', public: true },
{ path: '/dashboard', roles: '*' }
],
env: {
url: 'PUBLIC_SUPABASE_URL',
anonKey: 'PUBLIC_SUPABASE_ANON_KEY'
}
}
将Kavach插件添加到 vite.config.js ——它必须来得更早 sveltekit():
import { kavach } from '@kavach/vite'
import { sveltekit } from '@sveltejs/kit/vite'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [kavach(), sveltekit()]
})
注册服务器钩子 src/hooks.server.js:
import { kavach } from '$kavach/auth'
export const handle = kavach.handle
<!-- src/routes/+layout.svelte -->
<script>
import { setContext, onMount } from 'svelte'
import { page } from '$app/stores'
const kavach = $state({})
setContext('kavach', kavach)
onMount(async () => {
const { createKavach } = await import('kavach')
const { adapter, logger } = await import('$kavach/auth')
const { invalidateAll } = await import('$app/navigation')
const instance = createKavach(adapter, { logger, invalidateAll })
Object.assign(kavach, instance)
instance.onAuthChange($page.url)
})
</script>
它是做什么的
- 线路保护 -缺省情况下,所有路由都是私有的;定义公共和角色作用域的路由
kavach.config.js - 会话管理 -在服务器端读写会话cookie,并同步到客户端
- 身份验证适配器 -将登录、注销和令牌刷新委托给您选择的后端
- 日志记录 -结构化JSON日志通过
@kavach/logger
配置
使用 kavach init 脚手架配置,或创建 kavach.config.js 手动:
export default {
adapter: 'supabase',
providers: [
{ name: 'google', label: 'Continue with Google' },
{ mode: 'otp', name: 'magic', label: 'Email Magic Link' }
],
routes: {
auth: '(public)/auth',
logout: '/logout',
// per-role landing after login — string or async (session) => path
home: async (session) => (session.user.role === 'admin' ? '/admin' : '/dashboard')
},
rules: [
{ path: '/', public: true },
{ path: '/auth', public: true },
{ path: '/dashboard', roles: '*' }, // any authenticated user
{ path: '/admin', roles: ['admin'] } // only the 'admin' role
]
}
路由保护用flat表示 rules[] 数组, public: true 对于开放路线,
roles: '*' 对于任何经过身份验证的用户, roles: ['role', …] 对于特定的角色。每个角色
方法解析着陆页 routes.home 函数;逐路重定向覆盖使用
规则的 fallback (数字覆盖状态,字符串重定向)。看到
哨兵 查看完整的路由规则引用。
适配器
| 包 | 后端 |
|---|---|
@kavach/adapter-supabase | Supabase |
@kavach/adapter-firebase | 重火力点身份验证 |
@kavach/adapter-auth0 | Auth0 |
@kavach/adapter-amplify | AWS Amplify / Cognito |
@kavach/adapter-convex | 凸 |
API
createKavach(adapter, options?)
返回一个Kavach实例,带有:
handle- SvelteKit服务器钩子signIn(credentials)-使用配置的适配器登录signOut()-退出并清除会话onAuthChange(url)-处理OAuth回调urluser-当前用户(客户端响应)session-当前会话