diff --git a/docs/app/layout.tsx b/docs/app/layout.tsx index e6e6fdef..a8cffe27 100644 --- a/docs/app/layout.tsx +++ b/docs/app/layout.tsx @@ -1,13 +1,10 @@ import { Navbar } from "@/components/nav-bar"; import "./global.css"; import { RootProvider } from "fumadocs-ui/provider"; -import { Inter } from "next/font/google"; import type { ReactNode } from "react"; import { NavbarProvider } from "@/components/nav-mobile"; import { GeistMono } from "geist/font/mono"; import { GeistSans } from "geist/font/sans"; -import { ENV } from "@/lib/constants"; -import { Metadata } from "next"; import { baseUrl, createMetadata } from "@/lib/metadata"; export const metadata = createMetadata({ diff --git a/docs/app/page.tsx b/docs/app/page.tsx index cf1137ae..1a91225b 100644 --- a/docs/app/page.tsx +++ b/docs/app/page.tsx @@ -10,7 +10,6 @@ export default function HomePage() { crossesOffset="lg:translate-y-[5.25rem]" customPaddings id="hero" - > diff --git a/packages/better-auth/src/plugins/passkey/client.ts b/packages/better-auth/src/plugins/passkey/client.ts index 37fb2a28..b9e9e66b 100644 --- a/packages/better-auth/src/plugins/passkey/client.ts +++ b/packages/better-auth/src/plugins/passkey/client.ts @@ -1,4 +1,4 @@ -import type { BetterFetch } from "@better-fetch/fetch"; +import type { BetterFetch, BetterFetchOption } from "@better-fetch/fetch"; import { WebAuthnError, startAuthentication, @@ -53,11 +53,14 @@ export const getPasskeyActions = ($fetch: BetterFetch) => { } }; - const registerPasskey = async () => { + const registerPasskey = async (opts?: { + options?: BetterFetchOption; + }) => { const options = await $fetch( "/passkey/generate-register-options", { method: "GET", + ...opts?.options, }, ); if (!options.data) { @@ -72,6 +75,7 @@ export const getPasskeyActions = ($fetch: BetterFetch) => { response: res, type: "register", }, + ...opts?.options, }); if (!verified.data) { return verified; diff --git a/packages/better-auth/src/plugins/passkey/index.ts b/packages/better-auth/src/plugins/passkey/index.ts index 6dda9a9c..7a4f29ab 100644 --- a/packages/better-auth/src/plugins/passkey/index.ts +++ b/packages/better-auth/src/plugins/passkey/index.ts @@ -53,7 +53,7 @@ export interface PasskeyOptions { export type WebAuthnCookieType = { expectedChallenge: string; - userData: { id: string; email: string }; + userData: { id: string }; callbackURL?: string; }; @@ -71,10 +71,7 @@ export type Passkey = { export const passkey = (options?: PasskeyOptions) => { const baseURL = process.env.BETTER_AUTH_URL; - const rpID = - process.env.NODE_ENV === "development" - ? "localhost" - : options?.rpID || baseURL; + const rpID = options?.rpID || baseURL || "localhost"; if (!rpID) { throw new BetterAuthError( "passkey rpID not found. Please provide a rpID in the options or set the BETTER_AUTH_URL environment variable.", @@ -141,8 +138,7 @@ export const passkey = (options?: PasskeyOptions) => { const data: WebAuthnCookieType = { expectedChallenge: options.challenge, userData: { - ...session.user, - email: session.user.email || session.user.id, + id: session.user.id, }, }; @@ -207,7 +203,6 @@ export const passkey = (options?: PasskeyOptions) => { const data: WebAuthnCookieType = { expectedChallenge: options.challenge, userData: { - email: session?.user.email || session?.user.id || "", id: session?.user.id || "", }, callbackURL: ctx.body?.callbackURL, diff --git a/packages/better-auth/src/plugins/passkey/passkey.test.ts b/packages/better-auth/src/plugins/passkey/passkey.test.ts new file mode 100644 index 00000000..419eefd6 --- /dev/null +++ b/packages/better-auth/src/plugins/passkey/passkey.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, it } from "vitest"; +import { getTestInstance } from "../../test-utils/test-instance"; +import { passkey, passkeyClient } from "."; +import { createAuthClient } from "../../client"; + +//TODO: add tests for register and authenticate +describe("passkey", async () => { + const { auth, signInWithTestUser, customFetchImpl } = await getTestInstance({ + plugins: [passkey()], + }); + it("should generate register options", async () => { + const { res, headers } = await signInWithTestUser(); + const options = await auth.api.generatePasskeyRegistrationOptions({ + headers: headers, + }); + expect(options).toBeDefined(); + const client = createAuthClient({ + plugins: [passkeyClient()], + baseURL: "http://localhost:3000/api/auth", + fetchOptions: { + headers: headers, + customFetchImpl, + }, + }); + await client.$fetch("/passkey/generate-register-options", { + headers: headers, + method: "GET", + onResponse(context) { + const setCookie = context.response.headers.get("Set-Cookie"); + expect(setCookie).toBeDefined(); + }, + }); + }); + + it("should generate authenticate options", async () => { + const { headers } = await signInWithTestUser(); + const options = await auth.api.generatePasskeyAuthenticationOptions({ + headers: headers, + }); + expect(options).toBeDefined(); + }); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0580fc69..c950db8f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -796,6 +796,15 @@ importers: better-sqlite3: specifier: ^11.1.2 version: 11.1.2 + c12: + specifier: ^1.11.2 + version: 1.11.2(magicast@0.3.5) + chalk: + specifier: ^5.3.0 + version: 5.3.0 + commander: + specifier: ^12.1.0 + version: 12.1.0 consola: specifier: ^3.2.3 version: 3.2.3 @@ -866,15 +875,6 @@ importers: '@types/react': specifier: ^18.3.3 version: 18.3.3 - c12: - specifier: ^1.11.2 - version: 1.11.2(magicast@0.3.5) - chalk: - specifier: ^5.3.0 - version: 5.3.0 - commander: - specifier: ^12.1.0 - version: 12.1.0 h3: specifier: ^1.12.0 version: 1.12.0