Skip to content

Commit 97e5747

Browse files
committed
setup better auth
1 parent 3db848c commit 97e5747

File tree

5 files changed

+103
-30
lines changed

5 files changed

+103
-30
lines changed

rr/app/lib/auth-client.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import { createAuthClient } from "better-auth/react";
2+
export const authClient = createAuthClient({});

rr/app/lib/auth.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@ import { betterAuth } from "better-auth";
22
import { drizzleAdapter } from "better-auth/adapters/drizzle";
33
import { getDB } from "./db";
44

5-
export function getAuth(env: Env) {
5+
export function getAuth(env?: Env) {
66
const auth = betterAuth({
77
database: drizzleAdapter(getDB(env), {
88
provider: "pg",
99
}),
10+
emailAndPassword: {
11+
enabled: true,
12+
},
1013
});
14+
return auth;
1115
}
16+
17+
export const auth = getAuth();

rr/app/lib/db/index.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { drizzle as drizzleNeon } from "drizzle-orm/neon-http";
22
import { drizzle as drizzlePg } from "drizzle-orm/node-postgres";
33

4-
export function getDB(env: Env) {
5-
const db =
6-
env.NODE_ENV === "development"
7-
? drizzlePg(env.DATABASE_URL)
8-
: drizzleNeon(env.DATABASE_URL);
9-
return db;
4+
export function getDB(env?: Env) {
5+
// better-auth/cli を実行するとき
6+
if (!env) {
7+
const db = drizzlePg(process.env.DATABASE_URL);
8+
return db;
9+
}
10+
const db =
11+
env.NODE_ENV === "development"
12+
? drizzlePg(env.DATABASE_URL)
13+
: drizzleNeon(env.DATABASE_URL);
14+
return db;
1015
}

rr/app/lib/db/schema.ts

Lines changed: 73 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,76 @@
1-
import { integer, pgTable, varchar } from "drizzle-orm/pg-core";
1+
import {
2+
integer,
3+
pgTable,
4+
varchar,
5+
text,
6+
timestamp,
7+
boolean,
8+
} from "drizzle-orm/pg-core";
29

310
export const usersTable = pgTable("users", {
4-
id: integer().primaryKey().generatedAlwaysAsIdentity(),
5-
name: varchar({ length: 255 }).notNull(),
6-
age: integer().notNull(),
7-
email: varchar({ length: 255 }).notNull().unique(),
11+
id: integer().primaryKey().generatedAlwaysAsIdentity(),
12+
name: varchar({ length: 255 }).notNull(),
13+
age: integer().notNull(),
14+
email: varchar({ length: 255 }).notNull().unique(),
15+
});
16+
17+
// better-auth
18+
export const user = pgTable("user", {
19+
id: text("id").primaryKey(),
20+
name: text("name").notNull(),
21+
email: text("email").notNull().unique(),
22+
emailVerified: boolean("email_verified").default(false).notNull(),
23+
image: text("image"),
24+
createdAt: timestamp("created_at").defaultNow().notNull(),
25+
updatedAt: timestamp("updated_at")
26+
.defaultNow()
27+
.$onUpdate(() => /* @__PURE__ */ new Date())
28+
.notNull(),
29+
});
30+
31+
export const session = pgTable("session", {
32+
id: text("id").primaryKey(),
33+
expiresAt: timestamp("expires_at").notNull(),
34+
token: text("token").notNull().unique(),
35+
createdAt: timestamp("created_at").defaultNow().notNull(),
36+
updatedAt: timestamp("updated_at")
37+
.$onUpdate(() => /* @__PURE__ */ new Date())
38+
.notNull(),
39+
ipAddress: text("ip_address"),
40+
userAgent: text("user_agent"),
41+
userId: text("user_id")
42+
.notNull()
43+
.references(() => user.id, { onDelete: "cascade" }),
44+
});
45+
46+
export const account = pgTable("account", {
47+
id: text("id").primaryKey(),
48+
accountId: text("account_id").notNull(),
49+
providerId: text("provider_id").notNull(),
50+
userId: text("user_id")
51+
.notNull()
52+
.references(() => user.id, { onDelete: "cascade" }),
53+
accessToken: text("access_token"),
54+
refreshToken: text("refresh_token"),
55+
idToken: text("id_token"),
56+
accessTokenExpiresAt: timestamp("access_token_expires_at"),
57+
refreshTokenExpiresAt: timestamp("refresh_token_expires_at"),
58+
scope: text("scope"),
59+
password: text("password"),
60+
createdAt: timestamp("created_at").defaultNow().notNull(),
61+
updatedAt: timestamp("updated_at")
62+
.$onUpdate(() => /* @__PURE__ */ new Date())
63+
.notNull(),
64+
});
65+
66+
export const verification = pgTable("verification", {
67+
id: text("id").primaryKey(),
68+
identifier: text("identifier").notNull(),
69+
value: text("value").notNull(),
70+
expiresAt: timestamp("expires_at").notNull(),
71+
createdAt: timestamp("created_at").defaultNow().notNull(),
72+
updatedAt: timestamp("updated_at")
73+
.defaultNow()
74+
.$onUpdate(() => /* @__PURE__ */ new Date())
75+
.notNull(),
876
});

rr/app/routes/api.auth.$.ts

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,14 @@
1-
import { betterAuth } from "better-auth";
2-
import { drizzleAdapter } from "better-auth/adapters/drizzle";
3-
import { drizzle as drizzleNeon } from "drizzle-orm/neon-http";
4-
import { drizzle as drizzlePg } from "drizzle-orm/node-postgres";
51
import type { Route } from "./+types/api.auth.$";
2+
import { getAuth } from "~/lib/auth";
63

74
export async function loader({ request, context }: Route.LoaderArgs) {
8-
const { env } = context.cloudflare;
9-
const db =
10-
env.NODE_ENV === "development"
11-
? drizzlePg(env.DATABASE_URL)
12-
: drizzleNeon(env.DATABASE_URL);
13-
const auth = betterAuth({
14-
database: drizzleAdapter(db, {
15-
provider: "pg",
16-
}),
17-
emailAndPassword: {
18-
enabled: true,
19-
},
20-
});
21-
return auth.handler(request);
5+
const { env } = context.cloudflare;
6+
const auth = getAuth(env);
7+
return auth.handler(request);
8+
}
9+
10+
export async function action({ request, context }: Route.ActionArgs) {
11+
const { env } = context.cloudflare;
12+
const auth = getAuth(env);
13+
return auth.handler(request);
2214
}

0 commit comments

Comments
 (0)