Skip to content

Commit 0df5f3a

Browse files
ユーザー登録ページを作成する #5
1 parent 8a045eb commit 0df5f3a

File tree

8 files changed

+174
-162
lines changed

8 files changed

+174
-162
lines changed

.vscode/settings.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"cSpell.words": [
3+
"sveltejs"
4+
]
5+
}

package-lock.json

Lines changed: 99 additions & 159 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"@playwright/test": "^1.25.0",
1717
"@sveltejs/adapter-auto": "next",
1818
"@sveltejs/kit": "next",
19+
"@types/bcrypt": "^5.0.0",
1920
"@typescript-eslint/eslint-plugin": "^5.27.0",
2021
"@typescript-eslint/parser": "^5.27.0",
2122
"eslint": "^8.16.0",
@@ -32,6 +33,7 @@
3233
},
3334
"type": "module",
3435
"dependencies": {
35-
"@prisma/client": "^4.5.0"
36+
"@prisma/client": "^4.5.0",
37+
"bcrypt": "^5.1.0"
3638
}
3739
}

prisma/schema.prisma

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ model Role {
1414
id Int @id @default(autoincrement())
1515
created_at DateTime @default(now())
1616
updated_at DateTime @updatedAt
17-
name String
17+
name String @unique
1818
users User[]
1919
}
2020

@@ -23,7 +23,7 @@ model User {
2323
created_at DateTime @default(now())
2424
updated_at DateTime @updatedAt
2525
role_id Int
26-
name String
26+
username String @unique
2727
email String @unique
2828
password String
2929
role Role @relation(fields: [role_id], references: [id])

src/lib/database.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import prisma from '@prisma/client'
2+
3+
export const db = new prisma.PrismaClient()

src/routes/login/+page.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<h1>Log in</h1>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { db } from '$lib/database'
2+
import { invalid, redirect, type Actions } from '@sveltejs/kit'
3+
import bcrypt from 'bcrypt'
4+
import type { PageServerLoad } from './$types'
5+
6+
enum Roles {
7+
admin = 'admin',
8+
user = 'user',
9+
}
10+
11+
export const load: PageServerLoad = async () => {
12+
// todo
13+
}
14+
15+
export const actions: Actions = {
16+
default: async ({ request }) => {
17+
const data = await request.formData()
18+
const username = data.get('username') as string
19+
const email = data.get('email') as string
20+
const password = data.get('password') as string
21+
22+
if (!username || !email || !password) return invalid(404, { missing: true, username, email })
23+
24+
try {
25+
await db.user.create({
26+
data: {
27+
username,
28+
email,
29+
password: await bcrypt.hash(password, 10),
30+
role: { connect: { name: Roles.user } },
31+
},
32+
})
33+
} catch (error) {
34+
console.error(error)
35+
return invalid(400, { user_exists: true, username, email })
36+
}
37+
38+
console.log('aaa')
39+
40+
throw redirect(303, '/login')
41+
},
42+
}
43+

src/routes/register/+page.svelte

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<script lang="ts">
2+
import type { ActionData } from './$types';
3+
4+
export let form: ActionData;
5+
</script>
6+
7+
<h1>Register</h1>
8+
9+
<form method="POST">
10+
<input type="text" name="username" placeholder="Username" required />
11+
<input type="email" name="email" placeholder="email" required />
12+
<input type="password" name="password" placeholder="Password" required />
13+
14+
{#if form?.missing}<p class="error">Username, email and password are required.</p>{/if}
15+
{#if form?.user_exists}<p class="error">Username or email is used.</p>{/if}
16+
17+
<input type="submit" value="Register" />
18+
</form>

0 commit comments

Comments
 (0)