Nostr WoT

Аутентификация HTTP-сессии

Аутентификация HTTP-сессии

Используйте @nostr-wot/auth на сервере и /client в браузере. Подключите четыре маршрута и вызывайте loginWithSigner по действию пользователя. Сессия создаётся через событие NIP-98 типа 27235.

терминал
$npm install @nostr-wot/auth@5.0.0 nostr-wot-sdk@3.0.0 nostr-tools

Пример

typescript
// Server only: lib/auth.ts
import { createAuthService } from "@nostr-wot/auth";
import { createNextHandlers } from "@nostr-wot/auth/next";

const secret = process.env.NOSTR_AUTH_SECRET;
if (!secret) throw new Error("Configure NOSTR_AUTH_SECRET on the server");
export const handlers = createNextHandlers(createAuthService({
  secret, expectedVerifyUrl: "https://example.com/api/auth/verify",
  jwtIssuer: "https://example.com", jwtTtlSec: 3600,
}), { cookie: true, cookieAttrs: { secure: true, sameSite: "Lax" } });

// Each export belongs in its own Next.js route.ts file:
// app/api/auth/challenge/route.ts: export const POST = handlers.challenge;
// app/api/auth/verify/route.ts:    export const POST = handlers.verify;
// app/api/auth/me/route.ts:        export const GET = handlers.me;
// app/api/auth/logout/route.ts:    export const POST = handlers.logout;
// Import { handlers } from "@/lib/auth" in each route.

// Separate browser module, called by a login button:
// import { loginWithSigner } from "@nostr-wot/auth/client";
// import { Nip07Signer } from "nostr-wot-sdk/signers";
// await loginWithSigner({ baseUrl: "/api/auth", signer: new Nip07Signer() });

Примечания по интеграции

Замените example.com точным адресом приложения и URL проверки. Создайте надёжный случайный секрет на сервере, не в NEXT_PUBLIC. Проверяйте сессию и права на защищённых маршрутах. Запрос по умолчанию не хранит состояние: строго однократное использование требует хранилища погашения. Тип 22242 предназначен для реле, не HTTP.

Справочник и дополнительные параметры