UNPKG

@auth/sveltekit

Version:

Authentication for SvelteKit.

61 lines (60 loc) 2.21 kB
import { base } from "$app/paths"; export async function signIn(provider, options, authorizationParams) { const { callbackUrl, ...rest } = options ?? {}; const { redirect = true, redirectTo = callbackUrl ?? window.location.href, ...signInParams } = rest; const baseUrl = base ?? ""; const signInUrl = `${baseUrl}/auth/${provider === "credentials" ? "callback" : "signin"}/${provider}`; const res = await fetch(`${signInUrl}?${new URLSearchParams(authorizationParams)}`, { method: "post", headers: { "Content-Type": "application/x-www-form-urlencoded", "X-Auth-Return-Redirect": "1", }, body: new URLSearchParams({ ...signInParams, callbackUrl: redirectTo, }), }); const data = await res.json(); if (redirect) { const url = data.url ?? redirectTo; window.location.href = url; // If url contains a hash, the browser does not reload the page. We reload manually if (url.includes("#")) window.location.reload(); return; } const error = new URL(data.url).searchParams.get("error") ?? undefined; const code = new URL(data.url).searchParams.get("code") ?? undefined; return { error, code, status: res.status, ok: res.ok, url: error ? null : data.url, }; } export async function signOut(options) { const { redirect = true, redirectTo = options?.callbackUrl ?? window.location.href, } = options ?? {}; const baseUrl = base ?? ""; const res = await fetch(`${baseUrl}/auth/signout`, { method: "post", headers: { "Content-Type": "application/x-www-form-urlencoded", "X-Auth-Return-Redirect": "1", }, body: new URLSearchParams({ callbackUrl: redirectTo, }), }); const data = await res.json(); if (redirect) { const url = data.url ?? redirectTo; window.location.href = url; // If url contains a hash, the browser does not reload the page. We reload manually if (url.includes("#")) window.location.reload(); return; } return data; }