committed by
GitHub
1 changed files with 151 additions and 0 deletions
@ -0,0 +1,151 @@ |
|||
# ํ์ฌ ์ฌ์ฉ์ ๊ฐ์ ธ์ค๊ธฐ |
|||
|
|||
์ด์ ์ฅ์์ (์์กด์ฑ ์ฃผ์
์์คํ
์ ๊ธฐ๋ฐ์ผ๋ก ํ)๋ณด์ ์์คํ
์ *๊ฒฝ๋ก ์๋ ํจ์*์์ `str`๋ก `token`์ ์ ๊ณตํ์ต๋๋ค: |
|||
|
|||
```Python hl_lines="10" |
|||
{!../../../docs_src/security/tutorial001.py!} |
|||
``` |
|||
|
|||
๊ทธ๋ฌ๋ ์์ง๋ ์ ์ฉํ์ง ์์ต๋๋ค. |
|||
|
|||
ํ์ฌ ์ฌ์ฉ์๋ฅผ ์ ๊ณตํ๋๋ก ํฉ์๋ค. |
|||
|
|||
## ์ ์ ๋ชจ๋ธ ์์ฑํ๊ธฐ |
|||
|
|||
๋จผ์ Pydantic ์ ์ ๋ชจ๋ธ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. |
|||
|
|||
Pydantic์ ์ฌ์ฉํ์ฌ ๋ณธ๋ฌธ์ ์ ์ธํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
=== "ํ์ด์ฌ 3.7 ์ด์" |
|||
|
|||
```Python hl_lines="5 12-16" |
|||
{!> ../../../docs_src/security/tutorial002.py!} |
|||
``` |
|||
|
|||
=== "ํ์ด์ฌ 3.10 ์ด์" |
|||
|
|||
```Python hl_lines="3 10-14" |
|||
{!> ../../../docs_src/security/tutorial002_py310.py!} |
|||
``` |
|||
|
|||
## `get_current_user` ์์กด์ฑ ์์ฑํ๊ธฐ |
|||
|
|||
์์กด์ฑ `get_current_user`๋ฅผ ๋ง๋ค์ด ๋ด
์๋ค. |
|||
|
|||
์์กด์ฑ์ด ํ์ ์์กด์ฑ์ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์ญ๋๊น? |
|||
|
|||
`get_current_user`๋ ์ด์ ์ ์์ฑํ ๊ฒ๊ณผ ๋์ผํ `oauth2_scheme`๊ณผ ์ข
์์ฑ์ ๊ฐ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
์ด์ ์ *๊ฒฝ๋ก ๋์*์์ ์ง์ ์ํํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ ์ ์ข
์์ฑ `get_current_user`๋ ํ์ ์ข
์์ฑ `oauth2_scheme`์์ `str`๋ก `token`์ ์์ ํฉ๋๋ค. |
|||
|
|||
=== "ํ์ด์ฌ 3.7 ์ด์" |
|||
|
|||
```Python hl_lines="25" |
|||
{!> ../../../docs_src/security/tutorial002.py!} |
|||
``` |
|||
|
|||
=== "ํ์ด์ฌ 3.10 ์ด์" |
|||
|
|||
```Python hl_lines="23" |
|||
{!> ../../../docs_src/security/tutorial002_py310.py!} |
|||
``` |
|||
|
|||
## ์ ์ ๊ฐ์ ธ์ค๊ธฐ |
|||
|
|||
`get_current_user`๋ ํ ํฐ์ `str`๋ก ์ทจํ๊ณ Pydantic `User` ๋ชจ๋ธ์ ๋ฐํํ๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ (๊ฐ์ง) ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
|||
|
|||
=== "ํ์ด์ฌ 3.7 ์ด์" |
|||
|
|||
```Python hl_lines="19-22 26-27" |
|||
{!> ../../../docs_src/security/tutorial002.py!} |
|||
``` |
|||
|
|||
=== "ํ์ด์ฌ 3.10 ์ด์" |
|||
|
|||
```Python hl_lines="17-20 24-25" |
|||
{!> ../../../docs_src/security/tutorial002_py310.py!} |
|||
``` |
|||
|
|||
## ํ์ฌ ์ ์ ์ฃผ์
ํ๊ธฐ |
|||
|
|||
์ด์ *๊ฒฝ๋ก ์๋*์์ `get_current_user`์ ๋์ผํ `Depends`๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
=== "ํ์ด์ฌ 3.7 ์ด์" |
|||
|
|||
```Python hl_lines="31" |
|||
{!> ../../../docs_src/security/tutorial002.py!} |
|||
``` |
|||
|
|||
=== "ํ์ด์ฌ 3.10 ์ด์" |
|||
|
|||
```Python hl_lines="29" |
|||
{!> ../../../docs_src/security/tutorial002_py310.py!} |
|||
``` |
|||
|
|||
Pydantic ๋ชจ๋ธ์ธ `User`๋ก `current_user`์ ํ์
์ ์ ์ธํ๋ ๊ฒ์ ์์์ผ ํฉ๋๋ค. |
|||
|
|||
์ด๊ฒ์ ๋ชจ๋ ์๋ฃ ๋ฐ ํ์
๊ฒ์ฌ๋ฅผ ํตํด ํจ์ ๋ด๋ถ์์ ์ฐ๋ฆฌ๋ฅผ ๋์ธ ๊ฒ์
๋๋ค. |
|||
|
|||
!!! ํ |
|||
์์ฒญ ๋ณธ๋ฌธ๋ Pydantic ๋ชจ๋ธ๋ก ์ ์ธ๋๋ค๋ ๊ฒ์ ๊ธฐ์ตํ ๊ฒ์
๋๋ค. |
|||
|
|||
์ฌ๊ธฐ์ **FastAPI**๋ `Depends`๋ฅผ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํผ๋๋์ง ์์ต๋๋ค. |
|||
|
|||
!!! ํ์ธ |
|||
์ด ์์กด์ฑ ์์คํ
์ด ์ค๊ณ๋ ๋ฐฉ์์ ๋ชจ๋ `User` ๋ชจ๋ธ์ ๋ฐํํ๋ ๋ค์ํ ์์กด์ฑ(๋ค๋ฅธ "์์กด์ ์ธ")์ ๊ฐ์ง ์ ์๋๋ก ํฉ๋๋ค. |
|||
|
|||
ํด๋น ํ์
์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ ์๋ ์์กด์ฑ์ด ํ๋๋ง ์๋ ๊ฒ์ผ๋ก ์ ํ๋์ง ์์ต๋๋ค. |
|||
|
|||
## ๋ค๋ฅธ ๋ชจ๋ธ |
|||
|
|||
์ด์ *๊ฒฝ๋ก ์๋ ํจ์*์์ ํ์ฌ ์ฌ์ฉ์๋ฅผ ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ `Depends`๋ฅผ ์ฌ์ฉํ์ฌ **์์กด์ฑ ์ฃผ์
** ์์ค์์ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ๋ณด์ ์๊ตฌ ์ฌํญ์ ๋ํ ๋ชจ๋ ๋ชจ๋ธ ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค(์ด ๊ฒฝ์ฐ Pydantic ๋ชจ๋ธ `User`). |
|||
|
|||
๊ทธ๋ฌ๋ ์ผ๋ถ ํน์ ๋ฐ์ดํฐ ๋ชจ๋ธ, ํด๋์ค ๋๋ ํ์
์ ์ฌ์ฉํ๋๋ก ์ ํ๋์ง ์์ต๋๋ค. |
|||
|
|||
๋ชจ๋ธ์ `id`์ `email`์ด ์๊ณ `username`์ด ์๊ธธ ์ํ์ญ๋๊น? ๋ง์ต๋๋ค. ์ด๋ค์ ๋์ผํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
`str`๋ง ๊ฐ๊ณ ์ถ์ต๋๊น? ์๋๋ฉด ๊ทธ๋ฅ `dict`๋ฅผ ๊ฐ๊ณ ์ถ์ต๋๊น? ์๋๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋์ค ๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ์ง์ ๊ฐ๊ณ ์ถ์ต๋๊น? ๊ทธ๋ค์ ๋ชจ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. |
|||
|
|||
์ค์ ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ๋ก๊ทธ์ธํ๋ ์ฌ์ฉ์๊ฐ ์์ง๋ง ์ก์ธ์ค ํ ํฐ๋ง ์๋ ๋ก๋ด, ๋ด ๋๋ ๊ธฐํ ์์คํ
์ด ์์ต๋๊น? ๋ค์ ๋งํ์ง๋ง ๋ชจ๋ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. |
|||
|
|||
์ ํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๋ชจ๋ ์ข
๋ฅ์ ๋ชจ๋ธ, ๋ชจ๋ ์ข
๋ฅ์ ํด๋์ค, ๋ชจ๋ ์ข
๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ญ์์ค. **FastAPI**๋ ์์กด์ฑ ์ฃผ์
์์คํ
์ ๋ค๋ฃจ์์ต๋๋ค. |
|||
|
|||
## ์ฝ๋ ์ฌ์ด์ฆ |
|||
|
|||
์ด ์๋ ์ฅํฉํด ๋ณด์ผ ์ ์์ต๋๋ค. ๋์ผํ ํ์ผ์์ ๋ณด์, ๋ฐ์ดํฐ ๋ชจ๋ธ, ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฅ ๋ฐ *๊ฒฝ๋ก ์๋*์ ํผํฉํ๊ณ ์์์ ์ผ๋์ ๋์ญ์์ค. |
|||
|
|||
๊ทธ๋ฌ๋ ์ด๊ฒ ํคํฌ์ธํธ์
๋๋ค. |
|||
|
|||
๋ณด์๊ณผ ์ข
์์ฑ ์ฃผ์
ํญ๋ชฉ์ ํ ๋ฒ๋ง ์์ฑํ๋ฉด ๋ฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ์ํ๋ ๋งํผ ๋ณต์กํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๊ทธ๋๋ ์ ์ฐ์ฑ๊ณผ ํจ๊ป ํ ๊ณณ์ ํ ๋ฒ์ ์์ฑํ ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฌ๋ ๋์ผํ ๋ณด์ ์์คํ
์ ์ฌ์ฉํ์ฌ ์์ฒ ๊ฐ์ ์๋ํฌ์ธํธ(*๊ฒฝ๋ก ์๋*)๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค ๋ชจ๋(๋๋ ์ํ๋ ๋ถ๋ถ)๋ ์ด๋ฌํ ์์กด์ฑ ๋๋ ์์ฑํ ๋ค๋ฅธ ์์กด์ฑ์ ์ฌ์ฌ์ฉํ๋ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ์ด ์์ฒ ๊ฐ์ *๊ฒฝ๋ก ์๋*์ ๋ชจ๋ 3์ค ์ ๋๋ก ์ค์ผ ์ ์์ต๋๋ค. |
|||
|
|||
=== "ํ์ด์ฌ 3.7 ์ด์" |
|||
|
|||
```Python hl_lines="30-32" |
|||
{!> ../../../docs_src/security/tutorial002.py!} |
|||
``` |
|||
|
|||
=== "ํ์ด์ฌ 3.10 ์ด์" |
|||
|
|||
```Python hl_lines="28-30" |
|||
{!> ../../../docs_src/security/tutorial002_py310.py!} |
|||
``` |
|||
|
|||
## ์์ฝ |
|||
|
|||
์ด์ *๊ฒฝ๋ก ์๋ ํจ์*์์ ํ์ฌ ์ฌ์ฉ์๋ฅผ ์ง์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. |
|||
|
|||
์ฐ๋ฆฌ๋ ์ด๋ฏธ ์ด๋ค ์ฌ์ด์ ์์ต๋๋ค. |
|||
|
|||
์ฌ์ฉ์/ํด๋ผ์ด์ธํธ๊ฐ ์ค์ ๋ก `username`๊ณผ `password`๋ฅผ ๋ณด๋ด๋ ค๋ฉด *๊ฒฝ๋ก ์๋*์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. |
|||
|
|||
๋ค์ ์ฅ์ ํ์ธํด ๋ด
์๋ค. |
Loadingโฆ
Reference in new issue