포스트

[FastAPI] <5 : 보안 - 2. 현재 유저 가져오기>

공식 문서

앞서 기본적으로 작성했던 코드에 몇 개의 코드를 덧붙여 현재 사용자를 가져오는 코드를 작성해보자.

1. 유저 모델 생성

1
2
3
4
5
6
7
from pydantic import BaseModel

class User(BaseModel):
    username: str
    email: str | None = None
    full_name: str | None = None
    disabled: bool | None = None

pydanticBaseModel을 불러와 간단하게 User 모델을 정의했다.

2. get_current_user 함수

1
2
3
4
5
6
7
8
9
def fake_decode_token(token):
    return User(
        username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
    )
 
async def get_current_user(token: str = Depends(oauth2_scheme)):
    user = fake_decode_token(token)
    return user

get_current_user 함수는 파라메터로 token을 받아온다. 이때 token은 앞에서 실습했던 것 처럼 단순한 문자열이며, oauth2_scheme 을 의존하고 있어 get_current_uesr 실행 시 API 요청 헤더에서 가져올 수 있다.

(헷갈릴 수 있는데 현재는 이미 유저 토큰이 존재하는 상황이다.)

token을 받아온다면 fake_decode_token 에 token을 넘겨줘 userUser 클래스로 정의된 모델을 완성시켜준다.

3. 현재 유저 주입

1
2
3
@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

users/me 로 진입하게 된다면 현재 유저를 보여준다.

이때 current_userUser 타입이며 get_current_user를 의존하고 있다.

4. 전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from fastapi import Depends, FastAPI
from fastapi.security import OAuth2PasswordBearer
from pydantic import BaseModel

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

class User(BaseModel):
    username: str
    email: str | None = None
    full_name: str | None = None
    disabled: bool | None = None

def fake_decode_token(token):
    return User(
        username=token + "fakedecoded", email="john@example.com", full_name="John Doe"
    )

async def get_current_user(token: str = Depends(oauth2_scheme)):
    user = fake_decode_token(token)
    return user

@app.get("/users/me")
async def read_users_me(current_user: User = Depends(get_current_user)):
    return current_user

현재 사용자가 없으니 정상적으로 작동하는 코드는 아니다.

다음 게시물에선 실제로 임시 db에 저장된 회원 정보를 사용해 로그인 해 보는 코드를 작성해보겠다.



이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.