diff --git a/solidstart/github-oauth/package.json b/solidstart/github-oauth/package.json
index 5d4fb5e..0da6b99 100644
--- a/solidstart/github-oauth/package.json
+++ b/solidstart/github-oauth/package.json
@@ -7,19 +7,20 @@
"start": "node ./.output/server/index.mjs"
},
"dependencies": {
- "@lucia-auth/adapter-sqlite": "^3.0.0",
- "@solidjs/router": "^0.10.5",
- "@solidjs/start": "^0.4.2",
- "arctic": "^0.10.2",
- "better-sqlite3": "^9.2.2",
- "lucia": "^3.2.0",
- "solid-js": "^1.8.7",
- "vinxi": "0.0.54"
+ "@lucia-auth/adapter-sqlite": "^3.0.2",
+ "@solidjs/router": "^0.14.10",
+ "@solidjs/start": "^1.0.9",
+ "arctic": "^1.9.2",
+ "better-sqlite3": "^9.6.0",
+ "lucia": "^3.2.1",
+ "solid-js": "^1.9.2",
+ "vinxi": "^0.4.3"
},
"engines": {
"node": ">=18"
},
"devDependencies": {
- "@types/better-sqlite3": "^7.6.8"
+ "@types/better-sqlite3": "^7.6.8",
+ "typescript": "^5.6.3"
}
}
diff --git a/solidstart/github-oauth/src/app.tsx b/solidstart/github-oauth/src/app.tsx
index 9648928..e6770ce 100644
--- a/solidstart/github-oauth/src/app.tsx
+++ b/solidstart/github-oauth/src/app.tsx
@@ -1,5 +1,5 @@
import { Router } from "@solidjs/router";
-import { FileRoutes } from "@solidjs/start";
+import { FileRoutes } from "@solidjs/start/router";
import { Suspense } from "solid-js";
export default function App() {
diff --git a/solidstart/github-oauth/src/entry-client.tsx b/solidstart/github-oauth/src/entry-client.tsx
index e10a0fd..93211d7 100644
--- a/solidstart/github-oauth/src/entry-client.tsx
+++ b/solidstart/github-oauth/src/entry-client.tsx
@@ -1,3 +1,3 @@
import { mount, StartClient } from "@solidjs/start/client";
-mount(() => , document.getElementById("app"));
+mount(() => , document.getElementById("app")!);
diff --git a/solidstart/github-oauth/src/lib/utils.ts b/solidstart/github-oauth/src/lib/utils.ts
index 2404ca9..65a06b0 100644
--- a/solidstart/github-oauth/src/lib/utils.ts
+++ b/solidstart/github-oauth/src/lib/utils.ts
@@ -4,8 +4,8 @@ import { getRequestEvent } from "solid-js/web";
export const getAuthenticatedUser = cache(async () => {
"use server";
const event = getRequestEvent()!;
- if (!event.context.user) {
+ if (!event.locals.user) {
throw redirect("/login");
}
- return event.context.user;
+ return event.locals.user;
}, "user");
diff --git a/solidstart/github-oauth/src/middleware.ts b/solidstart/github-oauth/src/middleware.ts
index 11563dd..8901656 100644
--- a/solidstart/github-oauth/src/middleware.ts
+++ b/solidstart/github-oauth/src/middleware.ts
@@ -1,39 +1,41 @@
-import { createMiddleware, appendHeader, getCookie, getHeader } from "@solidjs/start/server";
+import { createMiddleware} from "@solidjs/start/middleware";
import { Session, User, verifyRequestOrigin } from "lucia";
import { lucia } from "./lib/auth";
+import { appendHeader, getCookie, getHeader } from "vinxi/http";
+import { FetchEvent } from "@solidjs/start/server";
export default createMiddleware({
- onRequest: async (event) => {
- if (event.node.req.method !== "GET") {
- const originHeader = getHeader(event, "Origin") ?? null;
- const hostHeader = getHeader(event, "Host") ?? null;
+ onRequest: [ async (event: FetchEvent) => {
+ if (event.request.method !== "GET") {
+ const originHeader = getHeader("Origin") ?? null;
+ const hostHeader = getHeader( "Host") ?? null;
if (!originHeader || !hostHeader || !verifyRequestOrigin(originHeader, [hostHeader])) {
- event.node.res.writeHead(403).end();
+ event.response.status = 403;
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());
+ appendHeader("Set-Cookie", lucia.createSessionCookie(session.id).serialize());
}
if (!session) {
- appendHeader(event, "Set-Cookie", lucia.createBlankSessionCookie().serialize());
+ appendHeader("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;
}
diff --git a/solidstart/github-oauth/src/routes/index.tsx b/solidstart/github-oauth/src/routes/index.tsx
index 2a910d9..549842c 100644
--- a/solidstart/github-oauth/src/routes/index.tsx
+++ b/solidstart/github-oauth/src/routes/index.tsx
@@ -1,11 +1,11 @@
import { action, createAsync, redirect } from "@solidjs/router";
import { getRequestEvent } from "solid-js/web";
-import { appendHeader } from "@solidjs/start/server";
+import { appendHeader } from "vinxi/http";
import { lucia } from "~/lib/auth";
import { getAuthenticatedUser } from "~/lib/utils";
export default function Index() {
- const user = createAsync(getAuthenticatedUser);
+ const user = createAsync(() => getAuthenticatedUser());
return (
<>
Hi, {user()?.username}!
@@ -20,10 +20,10 @@ export default function Index() {
const logout = action(async () => {
"use server";
const event = getRequestEvent()!;
- if (!event.context.session) {
+ if (!event.locals.session) {
return new Error("Unauthorized");
}
- await lucia.invalidateSession(event.context.session.id);
- appendHeader(event, "Set-Cookie", lucia.createBlankSessionCookie().serialize());
+ await lucia.invalidateSession(event.locals.session.id);
+ appendHeader("Set-Cookie", lucia.createBlankSessionCookie().serialize());
throw redirect("/login");
});
diff --git a/solidstart/github-oauth/src/routes/login/github/callback.ts b/solidstart/github-oauth/src/routes/login/github/callback.ts
index c607a1c..7c3446f 100644
--- a/solidstart/github-oauth/src/routes/login/github/callback.ts
+++ b/solidstart/github-oauth/src/routes/login/github/callback.ts
@@ -1,23 +1,15 @@
-import {
- getQuery,
- createError,
- getCookie,
- appendHeader,
- sendRedirect
-} from "@solidjs/start/server";
import { OAuth2RequestError } from "arctic";
import { generateId } from "lucia";
import { github, lucia } from "~/lib/auth";
import { db } from "~/lib/db";
-
-import type { APIEvent } from "@solidjs/start/server";
import type { DatabaseUser } from "~/lib/db";
+import { appendHeader, createError, getCookie, getQuery, HTTPEvent, sendRedirect } from "vinxi/http";
-export async function GET(event: APIEvent) {
+export async function GET(event: HTTPEvent) {
const query = getQuery(event);
const code = query.code?.toString() ?? null;
const state = query.state?.toString() ?? null;
- const storedState = getCookie(event, "github_oauth_state") ?? null;
+ const storedState = getCookie("github_oauth_state") ?? null;
if (!code || !state || !storedState || state !== storedState) {
throw createError({
status: 400
@@ -38,8 +30,8 @@ export async function GET(event: APIEvent) {
if (existingUser) {
const session = await lucia.createSession(existingUser.id, {});
- appendHeader(event, "Set-Cookie", lucia.createSessionCookie(session.id).serialize());
- return sendRedirect(event, "/");
+ appendHeader("Set-Cookie", lucia.createSessionCookie(session.id).serialize());
+ return sendRedirect("/");
}
const userId = generateId(15);
@@ -49,8 +41,8 @@ export async function GET(event: APIEvent) {
githubUser.login
);
const session = await lucia.createSession(userId, {});
- appendHeader(event, "Set-Cookie", lucia.createSessionCookie(session.id).serialize());
- return sendRedirect(event, "/");
+ appendHeader("Set-Cookie", lucia.createSessionCookie(session.id).serialize());
+ return sendRedirect("/");
} catch (e) {
if (e instanceof OAuth2RequestError && e.message === "bad_verification_code") {
// invalid code
diff --git a/solidstart/github-oauth/src/routes/login/github/index.ts b/solidstart/github-oauth/src/routes/login/github/index.ts
index aad0c99..9c76e63 100644
--- a/solidstart/github-oauth/src/routes/login/github/index.ts
+++ b/solidstart/github-oauth/src/routes/login/github/index.ts
@@ -1,4 +1,4 @@
-import { sendRedirect, setCookie } from "@solidjs/start/server";
+import { sendRedirect, setCookie } from "vinxi/http";
import { generateState } from "arctic";
import { github } from "~/lib/auth";
@@ -8,12 +8,12 @@ export async function GET(event: APIEvent) {
const state = generateState();
const url = await github.createAuthorizationURL(state);
- setCookie(event, "github_oauth_state", state, {
+ setCookie("github_oauth_state", state, {
path: "/",
secure: process.env.NODE_ENV === "production",
httpOnly: true,
maxAge: 60 * 10,
sameSite: "lax"
});
- return sendRedirect(event, url.toString());
+ return sendRedirect(url.toString());
}
diff --git a/solidstart/github-oauth/vite.config.ts b/solidstart/github-oauth/vite.config.ts
index db26772..bb4c908 100644
--- a/solidstart/github-oauth/vite.config.ts
+++ b/solidstart/github-oauth/vite.config.ts
@@ -1,7 +1,5 @@
import { defineConfig } from "@solidjs/start/config";
export default defineConfig({
- start: {
- middleware: "./src/middleware.ts"
- }
+ middleware: "./src/middleware.ts"
});