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