Skip to content
Snippets Groups Projects
Forked from Sandro Tosi / fastapi
3 commits ahead of the upstream repository.

현재 사용자 가져오기

이전 장에서 (의존성 주입 시스템을 기반으로 한)보안 시스템은 경로 작동 함수에서 strtoken을 제공했습니다:

{* ../../docs_src/security/tutorial001.py hl[10] *}

그러나 아직도 유용하지 않습니다.

현재 사용자를 제공하도록 합시다.

유저 모델 생성하기

먼저 Pydantic 유저 모델을 만들어 보겠습니다.

Pydantic을 사용하여 본문을 선언하는 것과 같은 방식으로 다른 곳에서 사용할 수 있습니다.

{* ../../docs_src/security/tutorial002.py hl[5,12:16] *}

get_current_user 의존성 생성하기

의존성 get_current_user를 만들어 봅시다.

의존성이 하위 의존성을 가질 수 있다는 것을 기억하십니까?

get_current_user는 이전에 생성한 것과 동일한 oauth2_scheme과 종속성을 갖게 됩니다.

이전에 경로 작동에서 직접 수행했던 것과 동일하게 새 종속성 get_current_user는 하위 종속성 oauth2_scheme에서 strtoken을 수신합니다.

{* ../../docs_src/security/tutorial002.py hl[25] *}

유저 가져오기

get_current_user는 토큰을 str로 취하고 Pydantic User 모델을 반환하는 우리가 만든 (가짜) 유틸리티 함수를 사용합니다.

{* ../../docs_src/security/tutorial002.py hl[19:22,26:27] *}

현재 유저 주입하기

이제 경로 작동에서 get_current_user와 동일한 Depends를 사용할 수 있습니다.

{* ../../docs_src/security/tutorial002.py hl[31] *}

Pydantic 모델인 Usercurrent_user의 타입을 선언하는 것을 알아야 합니다.

이것은 모든 완료 및 타입 검사를 통해 함수 내부에서 우리를 도울 것입니다.

/// tip | 팁

요청 본문도 Pydantic 모델로 선언된다는 것을 기억할 것입니다.

여기서 FastAPIDepends를 사용하고 있기 때문에 혼동되지 않습니다.

///

/// check | 확인

이 의존성 시스템이 설계된 방식은 모두 User 모델을 반환하는 다양한 의존성(다른 "의존적인")을 가질 수 있도록 합니다.

해당 타입의 데이터를 반환할 수 있는 의존성이 하나만 있는 것으로 제한되지 않습니다.

///

다른 모델

이제 경로 작동 함수에서 현재 사용자를 직접 가져올 수 있으며 Depends를 사용하여 의존성 주입 수준에서 보안 메커니즘을 처리할 수 있습니다.

그리고 보안 요구 사항에 대한 모든 모델 또는 데이터를 사용할 수 있습니다(이 경우 Pydantic 모델 User).

그러나 일부 특정 데이터 모델, 클래스 또는 타입을 사용하도록 제한되지 않습니다.

모델에 idemail이 있고 username이 없길 원하십니까? 맞습니다. 이들은 동일한 도구를 사용할 수 있습니다.

str만 갖고 싶습니까? 아니면 그냥 dict를 갖고 싶습니까? 아니면 데이터베이스 클래스 모델 인스턴스를 직접 갖고 싶습니까? 그들은 모두 같은 방식으로 작동합니다.

실제로 애플리케이션에 로그인하는 사용자가 없지만 액세스 토큰만 있는 로봇, 봇 또는 기타 시스템이 있습니까? 다시 말하지만 모두 동일하게 작동합니다.

애플리케이션에 필요한 모든 종류의 모델, 모든 종류의 클래스, 모든 종류의 데이터베이스를 사용하십시오. FastAPI는 의존성 주입 시스템을 다루었습니다.

코드 사이즈

이 예는 장황해 보일 수 있습니다. 동일한 파일에서 보안, 데이터 모델, 유틸리티 기능 및 경로 작동을 혼합하고 있음을 염두에 두십시오.

그러나 이게 키포인트입니다.

보안과 종속성 주입 항목을 한 번만 작성하면 됩니다.

그리고 원하는 만큼 복잡하게 만들 수 있습니다. 그래도 유연성과 함께 한 곳에 한 번에 작성할 수 있습니다.

그러나 동일한 보안 시스템을 사용하여 수천 개의 엔드포인트(경로 작동)를 가질 수 있습니다.

그리고 그들 모두(또는 원하는 부분)는 이러한 의존성 또는 생성한 다른 의존성을 재사용하는 이점을 얻을 수 있습니다.

그리고 이 수천 개의 경로 작동은 모두 3줄 정도로 줄일 수 있습니다.

{* ../../docs_src/security/tutorial002.py hl[30:32] *}

요약

이제 경로 작동 함수에서 현재 사용자를 직접 가져올 수 있습니다.

우리는 이미 이들 사이에 있습니다.

사용자/클라이언트가 실제로 usernamepassword를 보내려면 경로 작동을 추가하기만 하면 됩니다.

다음 장을 확인해 봅시다.