Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

🌐 Add Portuguese translation fordocs/pt/docs/tutorial/security/get-current-user.md#13188

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
Merged
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletionsdocs/pt/docs/tutorial/security/get-current-user.md
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
# Obter Usuário Atual

No capítulo anterior, o sistema de segurança (que é baseado no sistema de injeção de dependências) estava fornecendo à *função de operação de rota* um `token` como uma `str`:

{* ../../docs_src/security/tutorial001_an_py39.py hl[12] *}

Mas isso ainda não é tão útil.

Vamos fazer com que ele nos forneça o usuário atual.

## Criar um modelo de usuário

Primeiro, vamos criar um modelo de usuário com Pydantic.

Da mesma forma que usamos o Pydantic para declarar corpos, podemos usá-lo em qualquer outro lugar:

{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:6] *}

## Criar uma dependência `get_current_user`

Vamos criar uma dependência chamada `get_current_user`.

Lembra que as dependências podem ter subdependências?

`get_current_user` terá uma dependência com o mesmo `oauth2_scheme` que criamos antes.

Da mesma forma que estávamos fazendo antes diretamente na *operação de rota*, a nossa nova dependência `get_current_user` receberá um `token` como uma `str` da subdependência `oauth2_scheme`:

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

## Obter o usuário

`get_current_user` usará uma função utilitária (falsa) que criamos, que recebe um token como uma `str` e retorna nosso modelo Pydantic `User`:

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

## Injetar o usuário atual

Então agora nós podemos usar o mesmo `Depends` com nosso `get_current_user` na *operação de rota*:

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

Observe que nós declaramos o tipo de `current_user` como o modelo Pydantic `User`.

Isso nos ajudará dentro da função com todo o preenchimento automático e verificações de tipo.

/// tip | Dica

Você pode se lembrar que corpos de requisição também são declarados com modelos Pydantic.

Aqui, o **FastAPI** não ficará confuso porque você está usando `Depends`.

///

/// check | Verifique

A forma como esse sistema de dependências foi projetado nos permite ter diferentes dependências (diferentes "dependables") que retornam um modelo `User`.

Não estamos restritos a ter apenas uma dependência que possa retornar esse tipo de dado.

///

## Outros modelos

Agora você pode obter o usuário atual diretamente nas *funções de operação de rota* e lidar com os mecanismos de segurança no nível da **Injeção de Dependências**, usando `Depends`.

E você pode usar qualquer modelo ou dado para os requisitos de segurança (neste caso, um modelo Pydantic `User`).

Mas você não está restrito a usar um modelo de dados, classe ou tipo específico.

Você quer ter apenas um `id` e `email`, sem incluir nenhum `username` no modelo? Claro. Você pode usar essas mesmas ferramentas.

Você quer ter apenas uma `str`? Ou apenas um `dict`? Ou uma instância de modelo de classe de banco de dados diretamente? Tudo funciona da mesma forma.

Na verdade, você não tem usuários que fazem login no seu aplicativo, mas sim robôs, bots ou outros sistemas, que possuem apenas um token de acesso? Novamente, tudo funciona da mesma forma.

Apenas use qualquer tipo de modelo, qualquer tipo de classe, qualquer tipo de banco de dados que você precise para a sua aplicação. O **FastAPI** cobre tudo com o sistema de injeção de dependências.

## Tamanho do código

Este exemplo pode parecer verboso. Lembre-se de que estamos misturando segurança, modelos de dados, funções utilitárias e *operações de rota* no mesmo arquivo.

Mas aqui está o ponto principal.

O código relacionado à segurança e à injeção de dependências é escrito apenas uma vez.

E você pode torná-lo tão complexo quanto quiser. E ainda assim, tê-lo escrito apenas uma vez, em um único lugar. Com toda a flexibilidade.

Mas você pode ter milhares de endpoints (*operações de rota*) usando o mesmo sistema de segurança.

E todos eles (ou qualquer parte deles que você desejar) podem aproveitar o reuso dessas dependências ou de quaisquer outras dependências que você criar.

E todos esses milhares de *operações de rota* podem ter apenas 3 linhas:

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

## Recapitulação

Agora você pode obter o usuário atual diretamente na sua *função de operação de rota*.

Já estamos na metade do caminho.

Só precisamos adicionar uma *operação de rota* para que o usuário/cliente realmente envie o `username` e `password`.

Isso vem a seguir.
Loading

[8]ページ先頭

©2009-2026 Movatter.jp