๐ Front End Developer ์ Back End ๋์ ๊ธฐ ! ๐
์ด ๊ธ์ PROJECT LION : ํธ์ฝ์น ๊ฐ์ฌ๋์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฐธ๊ณ ํ ๊ธ์ ๋๋ค.
์์ ์ค, ๊ฐ๋ฐ๊ณผ์ ์ ๋ฆฌ ๋ฐ issue๊ฐ ๋์๋ ๋ถ๋ถ๋ค์ ๊ณต์ ๋ฐ ๊ธฐ๋กํ๊ณ ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
โ ์ด๋ฉ์ผ ํจ์ค์๋ ์ฒดํฌ ํ ๊ฐ์ด ์ ํจํ ๊ฒฝ์ฐ session id์ user id ๋ฅผ ์ ์ฅํ๊ณ , session id๊ฐ์ web browser ์ ์ ๋ฌํ๋ค.
์ดํ, web browser๋ ์์ฒญ์ ํ ๋๋ง๋ค session id๊ฐ์ flask์ ์ ๋ฌํ๊ณ session id๊ฐ์ด ์กด์ฌํ๋ฉด login ์ํ๋ก ํ๋จํ๊ฒ ๋๋ค.
- ๋ก๊ทธ์ธ API ์์ฑ
= route๋ /singin ์ฃผ์๊ฐ ๋ฐ singin ํจ์ ์์ฑ. form_data๋ ๋ฐ์์จ๋ค.
- ๋ฐ์ form data๋ฅผ ์ด์ฉํ์ฌ ๋ก๊ทธ์ธ ํ๋ณ
= sign_in ํจ์๋ form_data์ email๊ณผ password ๊ฐ์ checkํ์ฌ ์ ์์ ์ธ ๋ก๊ทธ์ธ์ด๋ผ๋ฉด user ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ด๊ณ , ์๋๋ผ๋ฉด ๋ก๊ทธ์ธ์ด ์ ๋๋ก ์๋๋์ง ์์๋ค๋ ๊ฐ์ return ์ํฌ ๊ฒ์ด๋ค.
- models > user.py sign_in ํจ์์์ฑ
- user ์ฐพ๊ธฐ
= login ํ ์ ์ ๋ฌ๋ data email์ด documnet์ ์กด์ฌํ๋ค๋ฉด users document์์ ๊ฐ์ ธ์์ user์ ๋ด๋๋ค.
- ์กด์ฌ์ฌ๋ถ์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ๋ฐฉ์
= ๋ง์ฝ email document data๊ฐ ์๋ค๋ฉด false๊ฐ์ return ํด ์ค๊ฒ์ด๊ณ , ์กด์ฌํ๋ค๋ฉด ๋ค์์์์ธ password๋ฅผ check ํด ์ฃผ์ด์ผ ํ๋ค.user์ password์ ์ ๋ฌ๋ฐ์ password ์ ๊ฐ์ด ๊ฐ์ง ์๋ค๋ฉด, return false๋ฅผ ์์ผ์ค๋ค.
๐ ํ์ฌ check_password_hash ๋ผ๋ ๊ฐ์ db์ ์ ์ฅ๋ password๋ฅผ ์ํธํ ์์ผ์ฃผ๊ธฐ ์ํด ์ฌ์ฉํ ๊ฒ์ด๋ค.
์์ธํ ์ค๋ช ์ ๋ค์ ๊ฒ์๋ ๊ฒ์ด๋ฏ๋ก, ๊ทธ ๊ฐ์ด password ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋๋ฐ ์ฌ์ฉ๋์๋ค ์ ๋๋ก ์ดํดํ๊ณ ๋์ด๊ฐ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ )= ์ฆ, ํ์๊ฐ์ ํ email์ด ์๊ฑฐ๋ password ๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด false ๊ฐ์ ๋ฐํํ ๊ฒ์ด๊ณ , ๋๋ค ์ผ์นํ๋ค๋ฉด ์ฐพ์ document user ์ ๋ณด๋ฅผ return ํ๋ค๋ ํจ์์ด๋ค.
- API์์ ์กด์ฌ์ฌ๋ถ์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ
= ๋ง์ฝ, user๊ฐ ์๋ค๋ฉด flash message ๋ฐ ํ์๊ฐ์ ํ์ด์ง๋ก return ์ํค๊ณ (์ถํ html file ์์ฑ ์์ )์กด์ฌํ๋ค๋ฉด session์ด์ฉ (import ํ์ = from flask import request, render_template, flash, redirect, url_for, session)
์ฆ, session ์ ๋ณด์ user_id๋ผ๋ key๊ฐ์ผ๋ก user id๋ฅผ ๋ฌธ์์ด๋ก ์ ์ฅํ๋ค๋ ์๋ฏธ์ด๋ค.
๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ค๋ฉด, list page๋ก redirect ์์ผ์ค๋ค.
- password ์ํธํ (5๋ฒ ์์ ์ฐธ๊ณ )
= ๊ธฐ์กด ํ์์ ๋ณด db๋ฅผ ์ฐธ๊ณ ํ ์ password ๊ฐ "1234" ๋ก ๊ฐ์ ๋์ด ์๋ค๋ฉด db์์๋ "1234" ๋ก ๋ณด์ฌ์ง๋ค.๊ทธ๋ฌํ์ฌ, ์ํธํ ์์ ์ ํตํด ํ์๋ค์ password ๊ฐ ๋ ธ์ถ๋์ง ์๋๋ก ์ํธํ ์์ผ์ฃผ๋ ์์ ์ ํด๋ณด๊ฒ ๋ค.
7-1. models > user.py file open ๋ฐ import
= generate_password_hash -> ์ํธํ๋ password= check_password_hash -> ์ํธํ๋ password check
7-2. ์ ์ฅ ์ ์ํธํ ์ฒ๋ฆฌ
7-3. password ๋น๊ต
check_password_hash ์ฌ์ฉํ์ฌ ๊ธฐ์กด ์ํธํ๋ password ์ ์ ๋ฌ๋ฐ์ ์ํธํ๋์ง ์์ password๋ฅผ ๋ฃ์ด check ํ ์ผ์นํ ์ true return/ ์ผ์นํ์ง ์์ ์ false return
์ด๋ ๊ฒ ์ํธํ ์์ ๊น์ง ๋ง์น ํ, ํ์๊ฐ์ ์งํ ์ ์ํธํ๋ password ๊ฐ db์ ์ ์ฅ๋ ๊ฒ์ด๋ค.
- login page API ์์ฑ ๋ฐ html file ์์ฑ
= page ๋ด๋ถ์ form action ๊ฐ๋ง signin์ผ๋ก ๋ณ๊ฒฝ
- ๋ก๊ทธ์ธ ์ฌ๋ถ ํ์ ํ ํ์
= ๋ก๊ทธ์ธ์ด ๋์ง ์์์ ๋๋ ๋ก๊ทธ์ธ ๋ฉ๋ด๊ฐ ๋ํ๋์ผํ๊ณ , ๋ก๊ทธ์ธ์ด ๋์์ ๊ฒฝ์ฐ์๋ ๋ก๊ทธ์์ ๋ฉ๋ด๊ฐ ๋ํ๋์ผ ํ๋ค.if ๊ตฌ๋ฌธ ๋ฐ ์ ์ฅํ session ๊ฐ์ผ๋ก ๋น๊ต๊ฐ ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค.
์ง์ ๊ตฌํํด ๋ณด๋ฉด์ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ๋ค.= user_id ๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ก๊ทธ์์, ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ ๋ ๊ฒ์ด๋ค.
- ๋ก๊ทธ์ธ ์ user_id ์ถ๋ ฅ
= db์ ์ ์ฅ๋ ๊ณ ์ id๊ฐ์ด ์ถ๋ ฅ๋ ๊ฒ์ด๋ค.
- ๋ก๊ทธ์์ ์์ฑ
= signin ์ด ์๋, signout์ด ๋ ๊ฒ์ด๋ค.
controllers > user.py > route ์์ฑ
= ์ ์ฅํด ๋ ์ด์ฉ๊ถ ์ ๋ณด๋ฅผ ์์ ๋ฉด, ์ด์ฉ๊ถ์ ์ฃผ๋๋ผ๋ ์ ๋ณด๊ฐ ์๋ค๊ณ ํ๋จํ์ฌ ์์ฐ์ ์ผ๋ก ๋ก๊ทธ์์ ์ํ๊ฐ ๋๋ค.
๋ก๊ทธ์์์ด ๋๋ค๋ฉด list ๊ฐ ๋ณด์ด๋๋ก redirect ์์ผ๋์๋ค.
์ฆ, ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ค๋ฉด ๋ก๊ทธ์ธ ๋ฉ๋ด๊ฐ ๋ก๊ทธ์์ ๋ฉ๋ด๋ก ๋ณ๊ฒฝ๋๊ณ , ๋ก๊ทธ์์์ ํด๋ฆญ ์ session์ด ์ด๊ธฐํ ๋จ์ ๋ฐ๋ผ ๋ก๊ทธ์์์ด ๋๊ณ , ๋ก๊ทธ์ธ ๋ฉ๋ด๊ฐ ๋ณด์ด๊ฒ ๋๋ค.
์ด๋ ๊ฒ ๋ก๊ทธ์ธ, ๋ก๊ทธ์์์ ๊ตฌ์ฑํ์๋ค๐
๋ค์ ์๊ฐ์๋ ํ์๊ด๋ฆฌ, ์ฌ์ฉ์ ๊ถํ๊ณผ ๊ด๋ จ๋ ๋ถ๋ถ์ ๊ตฌํํด ๋ณด๋๋ก ํ๊ฒ ๋ค.