๐Ÿ“ ์˜ค๋Š˜ ํ•œ ๊ฒƒ

  1. ๋ณต์Šต - MONGODB AND MONGOOSE

  2. ๋ณต์Šต - USER AUTHENTICATION


๐Ÿ“š ๋ฐฐ์šด ๊ฒƒ (๋ณต์Šต)

์‹ค์ œ ์ฝ”๋“œ๋Š” github์— ์˜ฌ๋ฆผ(wetube_v2)

3. MONGODB AND MONGOOSE

  • [TIL] 211125

    • WSL(Ubuntu 20.04)์— MongoDB(๋ฒ„์ „ 5.0) ์„ค์น˜
    • Mongoose ์„ค์น˜ ๋ฐ MongoDB ์—ฐ๊ฒฐ
  • [TIL] 211126

    • Video ์Šคํ‚ค๋งˆ ๋ฐ ๋ชจ๋ธ
    • server.js์™€ init.js ๋ถ„๋ฆฌ
    • CRUD ๊ตฌํ˜„ - home / upload / watch
  • [TIL] 211127

    • CRUD ๊ตฌํ˜„ - edit / delete / search
    • ํ•ด์‹œํƒœ๊ทธ ํฌ๋งท - pre hook / export ํฌ๋งท ํ•จ์ˆ˜ & import / static(์‚ฌ์šฉ์ž )
    • req.params / req.body / req.query
    • ๊ฒ€์ƒ‰ ์กฐ๊ฑด ๊ฐœ์„  (with ์ •๊ทœ ํ‘œํ˜„์‹)

๐Ÿ’ก ํ•ด์‹œํƒœ๊ทธ ํฌ๋งท

  • ๋ฐฉ๋ฒ• 1 (pre hook ์ด์šฉ)
    DB update ์‹œ์—๋Š” ์‚ฌ์šฉ ๋ชป ํ•จ
// Video.js
videoSchema.pre("save", async function () {
  // form์—์„œ ๋ฐ›์•„์˜จ hashtags๊ฐ€ ์•„๋‹ˆ๋ผ schema์˜ hashtags๋ผ์„œ ๋ฌธ์ž์—ด ์•„๋‹ˆ๊ณ  ๋ฐฐ์—ด ํ˜•ํƒœ โ—
  this.hashtags = await this.hashtags[0]
    .split(",")
    .map((word) => (word.startsWith("#") ? word : `#${word}`));
});
  • ๋ฐฉ๋ฒ• 2 (formatHashtags ํ•จ์ˆ˜ export & import)
// Video.js
export const formatHashtags = (hashtags) =>
  hashtags.split(",").map((word) => (word.startsWith("#") ? word : `#${word}`));
// videoController.js
import Video, { formatHashtags } from "../models/Video";

export const postEdit = async (req, res) => {
  // ์ค‘๋žต
  await Video.findByIdAndUpdate(id, {
    title,
    description,
    hashtags: formatHashtags(hashtags),
  });
  // ์ค‘๋žต
};
  • ๋ฐฉ๋ฒ•3 (query ์ง์ ‘ ๋งŒ๋“ค๊ธฐ)
// Video.js
videoSchema.static("formatHashtags", function(hashtags) {
  return hashtags.split(",").map((word) => (word.startsWith("#") ? word : `#${word}`));
})
// videoController.js
export const postEdit = async (req, res) => {
  // ์ค‘๋žต
  await Video.findByIdAndUpdate(id, {
    title,
    description,
    hashtags: Video.formatHashtags(hashtags),
  });
  // ์ค‘๋žต
};
  • [TIL] 211128
    • ์ด๋•Œ๊นŒ์ง€ ๋ฐฐ์šด ๊ฒƒ ๋ณต์Šต

4. USER AUTHENTICATION

  • [TIL] 211129

    • ํšŒ์›๊ฐ€์ž…
    • ๋กœ๊ทธ์ธ
    • ํŒจ์Šค์›Œ๋“œ ํ•ด์‹ฑ - bcrypt
  • [TIL] 211130 ๐Ÿ”ฅ

    • ๋ฌด์ƒํƒœ / ์„ธ์…˜ / ์ฟ ํ‚ค
    • express-session
  • [TIL] 211201 ๐Ÿ”ฅ

    • res.locals
    • connect-mongo (MongoStore)
    • express-session ์˜ต์…˜ - secret / resave / saveUninitialized / store
    • dotenv
  • [TIL] 211202 ๐Ÿ”ฅ

    • github ๋กœ๊ทธ์ธ ๊ตฌํ˜„
      • github๋กœ user๋ฅผ redirect
      • user๋ฅผ ์›น ์‚ฌ์ดํŠธ๋กœ ๋‹ค์‹œ redirect
      • access token์œผ๋กœ github API์—์„œ user ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
    • node-fetch - 2.6.1 ๋ฒ„์ „์œผ๋กœ ์„ค์น˜
  • [TIL] 211203 ๐Ÿ”ฅ

    • github ๋กœ๊ทธ์ธ ๊ทœ์น™ ์„ค์ •
    • ๋กœ๊ทธ์•„์›ƒ

๐Ÿ’ก github ๋กœ๊ทธ์ธ ์ˆœ์„œ

[ startGithubLogin ]

github ๋กœ๊ทธ์ธ ๋งํฌ ํด๋ฆญ
http:// localhost:7000/users/github/start
https:// github.com/login/oauth/authorize?client_id=...

[ finishGithubLogin ]

user๊ฐ€ ์•ฑ์œผ๋กœ ํ•˜์—ฌ๊ธˆ github user ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ์„ ์Šน์ธํ•ด์คŒ
http:// localhost:7000/users/github/finish?code=... (redirect)

https:// github.com/login/oauth/access_token?client_id... (fetch ์ด์šฉ)
code๋ฅผ access token์œผ๋กœ ๋ฐ”๊ฟˆ

https:// api.github.com/user (fetch ์ด์šฉ)
github api์— ์ ‘๊ทผํ•ด์„œ user data์™€ user email ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ด

primary & verified email์„ ์ฐพ์Œ
github email์ด DB์— ์žˆ๋‹ค๋ฉด login ์‹œํ‚ด
github email์ด DB์— ์—†๋‹ค๋ฉด, ๊ทธ user์˜ ๊ณ„์ •์„ ์ƒ์„ฑํ•จ

๐Ÿ’ก github email์ด DB์— ์—†๋‹ค๋ฉด, ๊ทธ user์˜ ๊ณ„์ •์„ ์ƒ์„ฑํ•œ๋‹ค

์ด๋•Œ (๋น„๋ก userSchema์—์„œ password๊ฐ€ ํ•„์ˆ˜ ๊ฐ’์ด ์•„๋‹ˆ๋”๋ผ๋„) User.create({ })์—๋Š” password: "" ๋„ ์ ์–ด์ค˜์•ผ ํ•œ๋‹ค.
ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ•ด์‹ฑํ•˜๋Š” bcrypt๊ฐ€ password ๊ฐ’์„ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์ด ๊ฒฝ์šฐ ๋นˆ ๋ฌธ์ž์—ด์„ ํ•ด์‹ฑํ•˜์—ฌ DB์— ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค.

๋Œ€์‹ , github ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๊ณ„์ • ์ƒ์„ฑ์„ ์œ„ํ•ด User.create({ })๋ฅผ ์‹คํ–‰ํ•  ๋•Œ password ํ•„๋“œ๋Š” ์•„์˜ˆ ์“ฐ์ง€ ๋ง๊ณ , ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ•ด์‹ฑํ•˜๋Š” pre hook์— if (!this.socialOnly && this.isModified("password"))๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. [TIL] 211226 ์ฐธ๊ณ 


โœจ ๋‚ด์ผ ํ•  ๊ฒƒ

  1. ๋ณต์Šต ๊ณ„์†ํ•˜๊ธฐ - user profile / upload file
profile
dev log

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด

Powered by GraphCDN, the GraphQL CDN