Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 16 additions & 15 deletions docs/pages/getting-started/solidstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,42 +46,43 @@ It's a bit verbose, but it just reads the session cookie, validates it, and sets

```ts
// src/middleware.ts
import { createMiddleware, appendHeader, getCookie, getHeader } from "@solidjs/start/server";
import { createMiddleware } from "@solidjs/start/middleware";
import { appendResponseHeader, getCookie, getRequestHeader } from "vinxi/http";
import { Session, User, verifyRequestOrigin } from "lucia";
import { lucia } from "./lib/auth";

export default createMiddleware({
onRequest: async (event) => {
if (event.node.req.method !== "GET") {
const originHeader = getHeader(event, "Origin") ?? null;
const hostHeader = getHeader(event, "Host") ?? null;
if (event.request.method !== "GET") {
const originHeader = getRequestHeader("Origin") ?? null;
// NOTE: You may need to use `X-Forwarded-Host` instead
const hostHeader = getRequestHeader("Host") ?? null;
if (!originHeader || !hostHeader || !verifyRequestOrigin(originHeader, [hostHeader])) {
event.node.res.writeHead(403).end();
event.nativeEvent.node.res.writeHead(403).end();
return;
}
}

const sessionId = getCookie(event, lucia.sessionCookieName) ?? null;
const sessionId = getCookie(lucia.sessionCookieName) ?? null;
if (!sessionId) {
event.context.session = null;
event.context.user = null;
event.locals.session = null;
event.locals.user = null;
return;
}

const { session, user } = await lucia.validateSession(sessionId);
if (session && session.fresh) {
appendHeader(event, "Set-Cookie", lucia.createSessionCookie(session.id).serialize());
appendResponseHeader("Set-Cookie", lucia.createSessionCookie(session.id).serialize());
}
if (!session) {
appendHeader(event, "Set-Cookie", lucia.createBlankSessionCookie().serialize());
appendResponseHeader("Set-Cookie", lucia.createBlankSessionCookie().serialize());
}
event.context.session = session;
event.context.user = user;
event.locals.session = session;
event.locals.user = user;
}
});

declare module "vinxi/server" {
interface H3EventContext {
declare module "@solidjs/start/server" {
interface RequestEventLocals {
user: User | null;
session: Session | null;
}
Expand Down
59 changes: 30 additions & 29 deletions docs/pages/guides/validate-session-cookies/solidstart.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,42 +10,43 @@ We recommend creating a middleware to validate requests and store the current us

```ts
// src/middleware.ts
import { createMiddleware, appendHeader, getCookie, getHeader } from "@solidjs/start/server";
import { createMiddleware } from "@solidjs/start/middleware";
import { appendResponseHeader, getCookie, getRequestHeader } from "vinxi/http";
import { Session, User, verifyRequestOrigin } from "lucia";
import { lucia } from "./lib/auth";

export default defineEventHandler((event) => {
if (context.request.method !== "GET") {
const originHeader = getHeader(event, "Origin") ?? null;
// NOTE: You may need to use `X-Forwarded-Host` instead
const hostHeader = getHeader(event, "Host") ?? null;
if (!originHeader || !hostHeader || !verifyRequestOrigin(originHeader, [hostHeader])) {
return event.node.res.writeHead(403).end();
export default createMiddleware({
onRequest: async (event) => {
if (event.request.method !== "GET") {
const originHeader = getRequestHeader("Origin") ?? null;
// NOTE: You may need to use `X-Forwarded-Host` instead
const hostHeader = getRequestHeader("Host") ?? null;
if (!originHeader || !hostHeader || !verifyRequestOrigin(originHeader, [hostHeader])) {
event.nativeEvent.node.res.writeHead(403).end();
return;
}
}
const sessionId = getCookie(lucia.sessionCookieName) ?? null;
if (!sessionId) {
event.locals.session = null;
event.locals.user = null;
return;
}
}

const sessionId = getCookie(event, lucia.sessionCookieName) ?? null;
if (!sessionId) {
event.context.user = null;
return;
}

const { session, user } = await lucia.validateSession(sessionId);
if (session && session.fresh) {
appendResponseHeader(
event,
"Set-Cookie",
lucia.createSessionCookie(session.id).serialize()
);
}
if (!session) {
appendResponseHeader(event, "Set-Cookie", lucia.createBlankSessionCookie().serialize());
const { session, user } = await lucia.validateSession(sessionId);
if (session && session.fresh) {
appendResponseHeader("Set-Cookie", lucia.createSessionCookie(session.id).serialize());
}
if (!session) {
appendResponseHeader("Set-Cookie", lucia.createBlankSessionCookie().serialize());
}
event.locals.session = session;
event.locals.user = user;
}
event.context.user = user;
});

declare module "vinxi/server" {
interface H3EventContext {
declare module "@solidjs/start/server" {
interface RequestEventLocals {
user: User | null;
session: Session | null;
}
Expand All @@ -70,5 +71,5 @@ This will allow you to access the current user inside server contexts.
```ts
import { getRequestEvent } from "solid-js/web";

const user = getRequestEvent()!.context.user;
const user = getRequestEvent()!.locals.user;
```
2 changes: 1 addition & 1 deletion packages/adapter-postgresql/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## 3.1.2

- Update peer dependencies.
- Update peer dependencies.

## 3.1.1

Expand Down