[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
pydantic
의 BaseModel
을 불러와 간단하게 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을 넘겨줘 user
에 User
클래스로 정의된 모델을 완성시켜준다.
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_user
는 User
타입이며 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에 저장된 회원 정보를 사용해 로그인 해 보는 코드를 작성해보겠다.