<aside>
</aside>
μλ νμΈμ! μΈμ¦ λ° λ³΄μ 6λΆμ μΈ λ²μ§Έ μκ°, 30κ°μ λλ€! π‘οΈ
μ§λ 29κ°μμλ μ¬μ©μκ° λ‘κ·ΈμΈνκ³ JWT μ‘μΈμ€ ν ν°μ λ°κΈλ°λ /token
μλν¬μΈνΈλ₯Ό μ±κ³΅μ μΌλ‘ ꡬννμ΅λλ€. μ΄μ μ¬μ©μλ€μ μ°λ¦¬ APIμ μ κ·Όν μ μλ 'μ΄μ (JWT)'λ₯Ό μ»μ μ μκ² λμμ΄μ! π
νμ§λ§ μμ§ μ°λ¦¬ APIμ λ€λ₯Έ λ¬Έλ€(μ: /tasks
μλν¬μΈνΈλ€)μ μ 겨μμ§ μμ΅λλ€. μ΄μ κ° μλ μλ λꡬλ λ€μ΄μ¬ μ μλ μνμ£ . μ΄λ² μκ°μλ λλμ΄ μ΄ λ¬Έλ€μ μ κ·Έλ λ°©λ²μ λ°°μλλ€! ν΄λΌμ΄μΈνΈκ° μμ² μ ν¨κ» λ³΄λΈ JWT ν ν°μ κ²μ¦νκ³ , μ ν¨ν ν ν°μ κ°μ§ μ¬μ©μλ§μ΄ 보νΈλ API κ²½λ‘μ μ κ·Όν μ μλλ‘ μΈμ¦ μꡬμ¬νμ μ μ©νλ λ°©λ²μ ꡬνν κ²μ
λλ€.
μ΄λ₯Ό μν΄, ν ν°μ κ²μ¦νκ³ νμ¬ λ‘κ·ΈμΈν μ¬μ©μ μ 보λ₯Ό λ°μ΄ν°λ² μ΄μ€μμ κ°μ Έμ€λ **μ¬μ¬μ© κ°λ₯ν μμ‘΄μ± ν¨μ(get_current_user
)**λ₯Ό λ§λ€κ³ , μ΄ μμ‘΄μ±μ μ°λ¦¬κ° 보νΈνκ³ μ νλ /tasks
κ΄λ ¨ μλν¬μΈνΈλ€μ μ£Όμ
(Depends
)νλ λ°©λ²μ μ€μ΅ν©λλ€. μ΄μ μ§μ§ μ¬μ©μ μΈμ¦μ΄ λμνλ APIλ₯Ό λ§λ€μ΄ λ΄
μλ€!
μ΄λ² 30κ°μμλ 29κ°μμ λ°κΈλ°μ JWT μ‘μΈμ€ ν ν°μ μ€μ λ‘ μ¬μ©νμ¬ API μλν¬μΈνΈλ₯Ό 보νΈνλ λ°©λ²μ ꡬνν©λλ€. ν΄λΌμ΄μΈνΈκ° 보νΈλ 리μμ€μ μ κ·ΌνκΈ° μν΄ μμ² ν€λμ Authorization: Bearer <token>
ννλ‘ JWTλ₯Ό 보λ΄λ©΄, μλ²λ μ΄ ν ν°μ λ°μ μ ν¨μ±μ κ²μ¦ν΄μΌ ν©λλ€.
λ¨Όμ , JWT ν ν° κ²μ¦ κ³Όμ (μλͺ
νμΈ, λ§λ£ μκ° νμΈ, νμ΄λ‘λ ν΄λ μ μΆμΆ)μ μ΄ν΄νκ³ , python-jose
λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ ν ν°μ λμ½λ©νκ³ κ²μ¦νλ λ‘μ§μ app/security.py
νμΌμ ꡬνν©λλ€. μ΄ κ³Όμ μμ λ°μν μ μλ λ€μν μ€λ₯(μ: μλͺ»λ μλͺ
, λ§λ£λ ν ν°, νμν ν΄λ μ λλ½)λ₯Ό μ²λ¦¬νκ³ μ μ ν HTTPException
(μ£Όλ‘ 401 Unauthorized)μ λ°μμν€λ λ°©λ²λ μμλ΄
λλ€.
λ€μμΌλ‘, μ΄ ν ν° κ²μ¦ λ‘μ§κ³Ό λ°μ΄ν°λ² μ΄μ€ μ‘°νλ₯Ό κ²°ν©νμ¬, μ ν¨ν ν ν°μΌλ‘λΆν° μ¬μ©μ μλ³μ(μ: μ΄λ©μΌ)λ₯Ό μΆμΆνκ³ ν΄λΉ μ¬μ©μμ λ°μ΄ν°λ² μ΄μ€ μ 보(SQLAlchemy User
κ°μ²΄)λ₯Ό λ°ννλ get_current_user
μμ‘΄μ± ν¨μλ₯Ό λ§λλλ€. FastAPIμ OAuth2PasswordBearer
μ€ν€λ§(oauth2_scheme
)λ₯Ό μ¬μ©νμ¬ μμ² ν€λμμ ν ν°μ μλμΌλ‘ μΆμΆνλ λ°©λ²μ νμ©ν©λλ€.
λ§μ§λ§μΌλ‘, μ°λ¦¬κ° 보νΈνκ³ μ νλ λͺ¨λ Task κ΄λ ¨ API μλν¬μΈνΈ(app/routers/tasks.py
λ΄λΆ ν¨μλ€)μ νλΌλ―Έν°μ Depends(get_current_user)
λ₯Ό μΆκ°νμ¬ μΈμ¦ μꡬμ¬νμ μ μ©ν©λλ€. μ΄μ μ ν¨ν JWT ν ν° μμ΄λ ν΄λΉ μλν¬μΈνΈλ€μ μ κ·Όν μ μκ² λ©λλ€!
μ΄ κ°μλ₯Ό λ§μΉλ©΄ μ¬λ¬λΆμ λ€μμ ν μ μκ² λ©λλ€:
Authorization: Bearer <token>
ν€λλ‘ λ³΄λ΄λ νμ€ λ°©μμ μ΄ν΄ν©λλ€.python-jose
λ₯Ό μ¬μ©νμ¬ JWTμ μλͺ
, λ§λ£ μκ°, ν΄λ μμ κ²μ¦νλ λ‘μ§μ ꡬνν μ μμ΅λλ€. (app/security.py
)JWTError
, λ§λ£)λ₯Ό μ²λ¦¬νκ³ HTTPException
μ λ°μμν¬ μ μμ΅λλ€.OAuth2PasswordBearer
μ DB μ‘°νλ₯Ό κ²°ν©νμ¬, ν ν° κ²μ¦ ν νμ¬ λ‘κ·ΈμΈλ μ¬μ©μ κ°μ²΄(SQLAlchemy λͺ¨λΈ)λ₯Ό λ°ννλ get_current_user
μμ‘΄μ± ν¨μλ₯Ό ꡬνν μ μμ΅λλ€.Depends(get_current_user)
λ₯Ό μ¬μ©νμ¬ νΉμ κ²½λ‘ μλ ν¨μ(μλν¬μΈνΈ)λ₯Ό 보νΈνκ³ , μΈμ¦λ μ¬μ©μ μ 보μ μ κ·Όν μ μμ΅λλ€.