From d7ade2dc3af277782c4072908b4bd9b6746d0065 Mon Sep 17 00:00:00 2001 From: Jay V Date: Mon, 16 Dec 2024 13:55:20 -0500 Subject: [PATCH] Updating example with dummy db call --- bun.lockb | Bin 237624 -> 240984 bytes examples/authorizer/bun/authorizer.ts | 8 +++++++- examples/authorizer/cloudflare/authorizer.ts | 8 +++++++- .../custom-frontend/auth/authorizer.ts | 8 +++++++- examples/authorizer/lambda/authorizer.ts | 8 +++++++- examples/authorizer/node/authorizer.ts | 8 +++++++- examples/client/astro/src/pages/index.astro | 2 +- examples/client/nextjs/app/page.tsx | 2 +- examples/subjects.ts | 2 +- 9 files changed, 38 insertions(+), 8 deletions(-) diff --git a/bun.lockb b/bun.lockb index f1beb7b96f3d5d270ce457f338b37f605d138891..22c1e181ea843bd9e4b487e32047969b7745519d 100755 GIT binary patch delta 45693 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 Y=iLoZ$rbY { if (value.provider === "password") { return ctx.subject("user", { - email: value.email, + id: await getUser(value.email), }) } throw new Error("Invalid provider") diff --git a/examples/authorizer/cloudflare/authorizer.ts b/examples/authorizer/cloudflare/authorizer.ts index 83d05a3..0ab1867 100644 --- a/examples/authorizer/cloudflare/authorizer.ts +++ b/examples/authorizer/cloudflare/authorizer.ts @@ -12,6 +12,12 @@ interface Env { CloudflareAuthKV: KVNamespace } +async function getUser(email: string) { + // Get user from database + // Return user ID + return "123" +} + export default { async fetch(request: Request, env: Env, ctx: ExecutionContext) { return authorizer({ @@ -31,7 +37,7 @@ export default { success: async (ctx, value) => { if (value.provider === "password") { return ctx.subject("user", { - email: value.email, + id: await getUser(value.email), }) } throw new Error("Invalid provider") diff --git a/examples/authorizer/custom-frontend/auth/authorizer.ts b/examples/authorizer/custom-frontend/auth/authorizer.ts index 9026ef3..23c773b 100644 --- a/examples/authorizer/custom-frontend/auth/authorizer.ts +++ b/examples/authorizer/custom-frontend/auth/authorizer.ts @@ -3,6 +3,12 @@ import { MemoryStorage } from "@openauthjs/openauth/storage/memory" import { CodeAdapter } from "@openauthjs/openauth/adapter/code" import { subjects } from "../../../subjects.js" +async function getUser(email: string) { + // Get user from database + // Return user ID + return "123" +} + export default authorizer({ subjects, storage: MemoryStorage({ @@ -29,7 +35,7 @@ export default authorizer({ success: async (ctx, value) => { if (value.provider === "code") { return ctx.subject("user", { - email: value.claims.email, + id: await getUser(value.claims.email), }) } throw new Error("Invalid provider") diff --git a/examples/authorizer/lambda/authorizer.ts b/examples/authorizer/lambda/authorizer.ts index 80adf53..0fb94ac 100644 --- a/examples/authorizer/lambda/authorizer.ts +++ b/examples/authorizer/lambda/authorizer.ts @@ -6,6 +6,12 @@ import { Resource } from "sst" import { PasswordAdapter } from "@openauthjs/openauth/adapter/password" import { PasswordUI } from "@openauthjs/openauth/ui/password" +async function getUser(email: string) { + // Get user from database + // Return user ID + return "123" +} + const app = authorizer({ storage: DynamoStorage({ table: Resource.LambdaAuthTable.name, @@ -23,7 +29,7 @@ const app = authorizer({ success: async (ctx, value) => { if (value.provider === "password") { return ctx.subject("user", { - email: value.email, + id: await getUser(value.email), }) } throw new Error("Invalid provider") diff --git a/examples/authorizer/node/authorizer.ts b/examples/authorizer/node/authorizer.ts index 7b3fed8..5b0fcb7 100644 --- a/examples/authorizer/node/authorizer.ts +++ b/examples/authorizer/node/authorizer.ts @@ -5,6 +5,12 @@ import { PasswordUI } from "@openauthjs/openauth/ui/password" import { serve } from "@hono/node-server" import { subjects } from "../../subjects" +async function getUser(email: string) { + // Get user from database + // Return user ID + return "123" +} + const app = authorizer({ subjects, storage: MemoryStorage({ @@ -22,7 +28,7 @@ const app = authorizer({ success: async (ctx, value) => { if (value.provider === "password") { return ctx.subject("user", { - email: value.email, + id: await getUser(value.email), }) } throw new Error("Invalid provider") diff --git a/examples/client/astro/src/pages/index.astro b/examples/client/astro/src/pages/index.astro index 696d027..5fdc5e4 100644 --- a/examples/client/astro/src/pages/index.astro +++ b/examples/client/astro/src/pages/index.astro @@ -7,5 +7,5 @@ import Layout from '../layouts/Layout.astro'; --- - Hello {Astro.locals.subject?.properties.email} + Hello {Astro.locals.subject?.properties.id} diff --git a/examples/client/nextjs/app/page.tsx b/examples/client/nextjs/app/page.tsx index 36c0f41..ebe0fae 100644 --- a/examples/client/nextjs/app/page.tsx +++ b/examples/client/nextjs/app/page.tsx @@ -20,7 +20,7 @@ export default async function Home() { {subject ? ( <>
  • - Logged in as {subject.properties.email}. + Logged in as {subject.properties.id}.
  • And then check out app/page.tsx. diff --git a/examples/subjects.ts b/examples/subjects.ts index 72fc515..4d041e0 100644 --- a/examples/subjects.ts +++ b/examples/subjects.ts @@ -3,6 +3,6 @@ import { createSubjects } from "@openauthjs/openauth" export const subjects = createSubjects({ user: object({ - email: string(), + id: string(), }), })