@svelte-dev/auth 一个简单好用的 Svelte 身份管理库

Logo

特性

  • 完全的服务器端身份验证
  • 完整的TypeScript支持
  • 策略-基础身份验证
  • 轻松处理成功和失败
  • 实现自定义策略
  • 支持持久会话

概述

Svelte Auth是一个完整的开源身份验证解决方案,适用于Svelte应用程序。

深受Passport.jsRemix-Auth的启发,但完全从头开始重写,以便在Web Fetch API之上工作。 Svelte Auth可以在最小的设置下添加到任何基于Svelte的应用程序中。

与Passport.js一样,它使用策略模式来支持不同的身份验证流程。 每个策略都作为单独的npm包单独发布。

官网: https://svelte.js.cool/auth/

安装

要使用它,从npm(yarn或bun)安装:

npm install @svelte-dev/auth @svelte-dev/session

使用

这是一个简单的例子:

// hooks.server.ts
import { env } from '$env/dynamic/private';
import { sequence } from '@sveltejs/kit/hooks';
import { handleAuth } from '@svelte-dev/auth';
import { OAuth2Strategy } from '@svelte-dev/auth-oauth2';

const oauthStrategy = new OAuth2Strategy(
  {
    clientID: env.SSO_ID,
    clientSecret: env.SSO_SECRET,
    callbackURL: env.SSO_CALLBACK_URL || 'http://localhost:8788/auth/oauth2/callback'
  },
  async ({ profile }) => {
    // Get the user data from your DB or API using the tokens and profile
    return profile;
  }
);

export const handle = handleAuth({
  // Auth Options
  autoRouting: true,
  strategies: [oauthStrategy],
  sessionKey: 'user',
  sessionErrorKey: 'auth:error',
  sessionStrategyKey: 'strategy',
  successRedirect: '/',
  failureRedirect: '/',
  // Session Storage Options
  adapter: {
    name: 'cookie',
    options: {
      chunk: true
    }
  },
  session: {
    secrets: ['s3cr3t']
  },
  cookie: {
    secure: !!env.SSO_CALLBACK_URL,
    sameSite: 'lax',
    path: '/',
    httpOnly: !!env.SSO_CALLBACK_URL
  }
});

就是这样。

进阶使用

自定义路由

如果您没有设置authRouting,您首先需要添加一个 src/routes/auth/[provider]/+server.ts:

import { redirect, type RequestEvent } from '@sveltejs/kit';

export const GET = async (event: RequestEvent) => {
  const { request } = event;
  const provider = event.params.provider ?? 'github';
  return await event.locals.auth.authenticate(event, provider, {
    successRedirect: '/dashboard',
    failureRedirect: '/error'
  });
};

然后添加回调 src/routes/auth/[provider]/callback/+server.ts.ts:

// 根据实际需要修改
import type { RequestEvent } from '@sveltejs/kit';

export const GET = async (event: RequestEvent) => {
  const provider = event.params.provider ?? 'github';

  return await event.locals.auth.authenticate(event, provider, {
    successRedirect: '/dashboard',
    failureRedirect: '/error'
  });
};

Typescript

修改app.d.ts,这是一个例子:

// See https://kit.svelte.dev/docs/types#app
// for information about these interfaces
declare global {
  namespace App {
    // interface Error {}
    interface Locals {
      auth: Auth;
      session: SessionStorage<{ user: any }>;
      user:
        | {
            invalid?: boolean;
            [key: string]: unknown;
          }
        | unknown;
    }
    // interface PageData {}
    interface Platform {
      env: {
        SSO_ID: string;
        SSO_SECRET: string;
      };
      context: {
        waitUntil(promise: Promise<unknown>): void;
      };
      caches: CacheStorage & { default: Cache };
    }
  }
}

export {};

策略

注意: 不同的策略配置参数可能不尽相同。

欢迎共享您的策略。

TypeDocs

自动化生成的接口文档

赞助

维护者: Willin Wang

如果您对本项目感兴趣,可以通过以下方式支持我:

License

Apache-2.0

Svelte-routing 是一个基于 Svelte 的轻量级路由,它提供了基本的路由功能,包括路由参数、嵌套路由、重定向等特性。使用 Svelte-routing 非常简单,你可以按照以下步骤进行配置: 1. 安装 Svelte-routing 你可以使用 npm 或 yarn 安装 Svelte-routing: ``` npm install --save svelte-routing ``` 或 ``` yarn add svelte-routing ``` 2. 导入 Router 和 Route 组件 在 Svelte 应用中,你需要使用 Router 和 Route 组件来定义路由规则。你可以在需要使用路由的组件中导入这两个组件: ```js import { Router, Route } from 'svelte-routing'; ``` 3. 定义路由规则 使用 Router 和 Route 组件,你可以定义应用的路由规则。例如,你可以在 App.svelte 文件中定义两个路由规则,分别对应着应用的 / 和 /about 路径: ```html <Router> <Route path="/" component={Home} /> <Route path="/about" component={About} /> </Router> ``` 在这个例子中,Home 和 About 分别是两个 Svelte 组件,它们会在对应的路由被匹配时被渲染。 4. 使用路由参数 Svelte-routing 支持路由参数,你可以在路由规则中使用冒号(:)来定义动态参数。例如,你可以定义一个 /user/:id 路径,其中 :id 表示一个动态参数。当用户访问 /user/123 时,Svelte-routing 会自动将参数传递给对应的组件。你可以在组件中使用 $routeParams.id 来获取该参数。例如: ```html <!-- 定义路由规则 --> <Route path="/user/:id" component={User} /> <!-- User 组件中获取参数 --> <script> export let $routeParams; console.log($routeParams.id); </script> ``` 5. 使用重定向 Svelte-routing 还支持重定向功能,你可以在路由规则中使用 redirect 属性来实现重定向。例如,你可以将 /about 路径重定向到 /about-us 路径: ```html <Route path="/about" redirect="/about-us" /> ``` 以上就是使用 Svelte-routing 实现基本路由功能的步骤。Svelte-routing 还支持嵌套路由、路由守卫等高级功能,你可以查阅官方文档来学习更多内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willin 老王躺平不摆烂

感谢你这么好看还这么慷慨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值