diff --git a/aulas/06.md b/aulas/06.md index bc4568d7..1f0593c2 100644 --- a/aulas/06.md +++ b/aulas/06.md @@ -316,16 +316,6 @@ class Token(BaseModel): token_type: str ``` -### Utilizando OAuth2PasswordRequestForm - -A classe `OAuth2PasswordRequestForm` é uma classe especial do FastAPI que gera automaticamente um formulário para solicitar o username (email neste caso) e a senha. Este formulário será apresentado automaticamente no Swagger UI e Redoc, facilitando a realização de testes de autenticação. - -Para usar os formulários no FastAPI, precisamos instalar o `python-multipart`: - -```shell title="$ Execução no terminal!" -poetry add python-multipart -``` - ### Criando um endpoint de geração do token Agora criaremos o endpoint que irá autenticar o usuário e fornecer um token de acesso JWT. Este endpoint irá receber as informações de login do usuário, verificar se as credenciais são válidas e, em caso afirmativo, retornar um token de acesso JWT. @@ -343,7 +333,7 @@ from fast_zero.security import ( @app.post('/token', response_model=Token) def login_for_access_token( - form_data: OAuth2PasswordRequestForm = Depends(), + form_data: OAuth2PasswordRequestForm = Depends(), #(1)! session: Session = Depends(get_session), ): user = session.scalar(select(User).where(User.email == form_data.username)) @@ -365,6 +355,8 @@ def login_for_access_token( return {'access_token': access_token, 'token_type': 'bearer'} ``` +1. A classe `OAuth2PasswordRequestForm` é uma classe especial do FastAPI que gera automaticamente um formulário para solicitar o username (email neste caso) e a senha. Este formulário será apresentado automaticamente no Swagger UI e Redoc, facilitando a realização de testes de autenticação. + Esse endpoint recebe os dados do formulário através do `form_data` (que são injetados automaticamente graças ao `Depends()`) e tenta recuperar um usuário com o email fornecido. Se o usuário não for encontrado ou a senha não corresponder ao hash armazenado no banco de dados, uma exceção é lançada. Caso contrário, um token de acesso é criado usando o `create_access_token()` que criamos anteriormente e retornado como uma resposta. ### Testando /token