⚠️ Under Construction!
OIDC/OAuth2 authentication and authorization for prerendered/client-side-rendered SvelteKit apps.
npm i -D sk-oidc-oauth
For full usage information, see the docs.
Authentication
provider in your root +layout.svelte
.<!-- src/routes/+layout.svelte -->
<script lang="ts">
import { Authentication, type UserManagerSettings } from 'sk-oidc-oauth';
const userManagerSettings: UserManagerSettings = {
authority: 'https://login.microsoftonline.com/tenant-id/v2.0',
client_id: '1234',
redirect_uri: 'http://localhost:5173/auth/callback/azure',
loadUserInfo: true,
};
</script>
<Authentication {userManagerSettings}>
<slot />
</Authentication>
redirect_uri
.<!--
src/routes/auth/callback/azure/+page.svelte
We just need the route to be defined, so this file can/should be empty.
-->
You're all set! You can use all of the library's components, functions, and stores anywhere inside the root layout.
Use the AuthorizationGuard
in a nested +layout.svelte
to protect all of the routes within:
<!-- src/routes/private/+layout.svelte -->
<script lang="ts">
import { AuthorizationGuard, isFullyAuthenticated } from 'sk-oidc-oauth';
$: yourCustomCondition = false;
</script>
<AuthorizationGuard
passCondition={$isAuthenticated && yourCustomCondition}
redirect="/auth/signin"
>
<slot />
</AuthorizationGuard>
<!-- src/lib/components/AuthButton/AuthButton.svelte -->
<script lang="ts">
import {
isFullyAuthenticated,
startSigninRedirect,
startSignoutRedirect,
} from 'sk-oidc-oauth';
</script>
{#if $isFullyAuthenticated}
<button type="button" on:click={startSignoutRedirect}>Sign out</button>
{:else}
<button type="button" on:click={startSigninRedirect}>Sign in</button>
{/if}
<!-- src/lib/components/User/User.svelte -->
<script lang="ts">
import { userInfo } from 'sk-oidc-oauth';
</script>
<ul>
<li>{$userInfo.name}</li>
<li>Email: {$userInfo.email}</li>
</ul>
Zach Scroggins
Contributions, issues and feature requests are welcome!
Feel free to check issues page. You can also take a look at the contributing guide.
Give a ⭐️ if this project helped you!
Copyright © 2023 Zach Scroggins.
This project is MIT licensed.
This README was generated with ❤️ by readme-md-generator
Generated using TypeDoc v0.25.2