Skip to content

Commit abd567a

Browse files
committed
サーバー側のみ
1 parent 206d05b commit abd567a

File tree

17 files changed

+673
-324
lines changed

17 files changed

+673
-324
lines changed

docs/3-web-servers/07-fetch-api-post/index.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ Fetch APIを用いると、サーバーからデータを取得するだけで
1212

1313
[Expressによるサーバー構築](../server/)の節では、<Term>クライアント</Term>から<Term>サーバー</Term>への要求を<Term>リクエスト</Term>と呼び、その応答を<Term>レスポンス</Term>と呼ぶことを学びました。HTTPのリクエストやレスポンスは、主に3つの要素から構成されます。
1414

15-
- **制御情報**: リクエストやレスポンスの基本的な情報を含む部分。リクエストには、<Term type="httpMethod">**メソッド**</Term>と呼ばれるHTTPリクエストの種類を指定するための情報や、リクエストの対象となるパスなどが含まれます。レスポンスには、HTTPステータスコードと呼ばれる、リクエストの結果を示すコードが含まれます。
15+
- **制御情報**: リクエストやレスポンスの基本的な情報を含む部分。リクエストには、<Term type="httpMethod">**メソッド**</Term>と呼ばれるHTTPリクエストの種類を指定するための情報や、リクエストの対象となるパスなどが含まれます。レスポンスには、<Term>**ステータスコード**</Term>と呼ばれる、リクエストの結果を示すコードが含まれます。
1616
- **ヘッダー**: リクエストやレスポンスに関する追加情報を含む部分。名前と値のペアで構成され、リクエストやレスポンスの内容をより詳細に説明します。
1717
- **ボディ**: リクエストやレスポンスの実際のデータ。リクエストのボディには、サーバーに送信するデータが含まれ、レスポンスのボディには、サーバーからクライアントに返されるデータが含まれます。
1818

docs/4-advanced/01-cookie/_samples/simple-authentication/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,5 @@ node_modules
33
.env
44

55
/generated/prisma
6+
7+
/generated/prisma
Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,53 @@
11
import express from "express";
2+
import cookieParser from "cookie-parser";
23
import { PrismaClient } from "./generated/prisma/index.js";
34

45
const app = express();
5-
const client = new PrismaClient();
6+
const prismaClient = new PrismaClient();
67

78
app.use(express.json());
9+
app.use(cookieParser());
810
app.use(express.static("./public"));
911

1012
app.post("/login", async (request, response) => {
11-
const user = await client.user.findUnique({
13+
if (!request.body.username || !request.body.password) {
14+
response.sendStatus(400);
15+
return;
16+
}
17+
const user = await prismaClient.user.findUnique({
1218
where: { username: request.body.username },
1319
});
1420
if (!user || user.password !== request.body.password) {
1521
response.sendStatus(401);
1622
return;
1723
}
18-
response.send(`ようこそ、${user.username}さん!`);
24+
25+
const session = await prismaClient.session.create({
26+
data: { userId: user.id, sessionId: crypto.randomUUID() },
27+
});
28+
response.cookie("sessionId", session.sessionId);
29+
response.send(200);
30+
});
31+
32+
app.get("/profile", async (request, response) => {
33+
// 認証
34+
if (!request.cookies.sessionId) {
35+
response.sendStatus(401);
36+
return;
37+
}
38+
const session = await prismaClient.session.findUnique({
39+
where: { sessionId: request.cookies.sessionId },
40+
});
41+
if (!session) {
42+
response.sendStatus(401);
43+
return;
44+
}
45+
46+
// 実際の処理
47+
const user = await prismaClient.user.findUnique({
48+
where: { id: session.userId },
49+
});
50+
response.json({ username: user.username });
1951
});
2052

2153
app.listen(3000);

0 commit comments

Comments
 (0)