iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

Simple Auth App:ORM & DB setting

今天來繼續製作Simple Auth App,昨天將API interface設計好,再來需要設定資料庫與ORM,由於作業重點不是在資料庫,就選擇簡易的SQLite來實作資料庫與TypeORM。

npm install typeorm sqlite3 reflect-metadata

建立ormconfig.json

{
  "type": "sqlite",
  "database": "simple-auth-app.db",
  "synchronize": true,
  "logging": false,
  "entities": ["src/entity/**/*.ts"],
  "migrations": ["src/migration/**/*.ts"],
  "subscribers": ["src/subscriber/**/*.ts"]
}

建立src/entity folder,在裡面新增User.ts

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()
export class User {
     @PrimaryGeneratedColumn()
    id: number;

    @Column({ unique: true })
    email: string;

    @Column()
    password: string; 

    @Column({ default: '' })
    name: string;

    @Column({ default: false })
    emailVerified: boolean;

    @Column({ nullable: true })
    emailVerificationToken: string;

    @Column({ default: 0 })
    loginCount: number;

    @CreateDateColumn()
    signUpTimestamp: Date;

    @UpdateDateColumn()
    lastLoginTimestamp: Date;

}
  • email: 用戶的電子郵件地址。使用unique: true來確保每個電子郵件地址只能註冊一次。
  • password: 用戶的密碼。這應該是經過雜湊與加鹽的。
  • name: 用戶的名字,它可能來自Google OAuth或是使用者在應用程式中自行設定。
  • emailVerified: 一個布林值,表示用戶是否已驗證他們的電子郵件地址。
  • emailVerificationToken: 用於驗證電子郵件的令牌。當用戶點擊驗證連結時,您的後端可以檢查此令牌是否匹配,然後將emailVerified設置為true。
  • loginCount: 用戶登入的次數。
  • signUpTimestamp 和 lastLoginTimestamp: 這些欄位分別記錄用戶註冊的時間和上次登入的時間。

然後在src/index.ts中新增使用TypeORM連結資料庫的方法

import "reflect-metadata";
import express from "express";
import { createConnection } from "typeorm";
import { User } from "./entity/User";

createConnection().then(async connection => {
    const userRepository = connection.getRepository(User);

    const app = express();
    const port = 3000;

    app.use(express.json()); // Middleware for parsing JSON

    // Register Route
    app.post("/register", async (req, res) => {
        const user = new User();
        user.email = req.body.email;
        user.password = req.body.password;
        await userRepository.save(user);
        res.json({ message: "User registered!" });
    });

    // ... Add other routes for login, email verification, etc.

    app.listen(port, () => {
        console.log(`Server started on http://localhost:${port}`);
    });

}).catch(error => console.log(error));

上一篇
[Day 26] Simple Auth App:專案始動
下一篇
[Day 28] Simple Auth App:註冊、登入實作
系列文
從實戰中學習:Take Home Assignment review & refactor30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言