Skip to content

Sumiu a AccountController? Veja como gerar no .Net Core 2.1

Você já deve ter observado que no .Net Core 2.1 a famosa Account controller não existe mais e mesmo assim toda a funcionalidade de autenticação continua funcionando. Quer saber o motivo? Como fazer ela aparecer novamente? Esses são os assuntos do artigo de hoje.

Como em um projeto novo, quando se digita a instrução abaixo, o CLI do dotnet cria uma nova solução web incluindo a parte de autenticação.

>dotnet new mvc -o MvcAuth -au Individual

Até a versão 2.0 do .Net Core era criada uma série de código para que a feature de autenticação pudesse funcionar.

Isso traz um ponto positivo e negativo na minha opinião:

  • Esse código pronto ajuda bastante, pois sabemos que ele funciona e assim não se perde tempo implementando.
  • Muito código gerado que na teoria você não está cuidando, não tem teste e tem que manter.

Pensando nisso, a equipe da Microsoft, na versão 2.1 do core, implementou o Razor para ser reutilizável em biblioteca de classe. Dessa maneira qualquer UI poderá ser compartilhada por biblioteca de classe, sem que você de fato tenha o HTML e o código .cs.

Na minha opinião isso é uma coisa super legal, pense naquelas UI que você acaba tendo que duplicar em soluções diferentes da empresa. Agora com essa nova funcionalidade isso termina.

Mas o que isso tem haver com o tema do artigo? Tudo!

Com essa nova feature do Razor, toda a parte de autenticação do Identity foi para uma biblioteca de classe e agora todo novo projeto usa essa lib. 

The good news is that in ASP.NET Core 2.1 we can now ship Razor UI in reusable class libraries. We are using this feature to provide the entire identity UI as a prebuilt package (Microsoft.AspNetCore.Identity.UI) that you can simply reference from an application. The project templates in 2.1 have been updated to use the prebuilt UI, which dramatically reduces the amount of code you have to deal with”.

O texto acima está em um dos links contidos na fonte deste artigo e mostra que a mudança é visto como uma melhoria no template do .Net Core 2.1.

 

Se você analisar o arquivo _LoginPartial.cshtml, conforme a imagem acima, verá que o mesmo aponta para /Account/Register para registrar um novo usuário, porém se procurar verá que isso não existe na solução.

Outras coisas também mudaram:

  • Uma nova pasta chamada Areas que contém o arquivo _ViewStart.cshtml para informar o caminho do HTML de layout.
  • No arquivo Startup.cs agora usamos o AddDefaultIdentity em vez do AddIdentity.

E agora, não faço mais nada? Não posso mudar?

Sim, pode, mas para isso precisamos de alguns comandos a mais.

Assim como é possível empacotar UI do Identy através de uma biblioteca de classe, é possível desempacotar a biblioteca para que o código apareça na solução. Mas faço uma ressalva, a AccountController não volta mais mesmo!

Show me the code!

Para iniciar, é preciso instalar a ferramenta abaixo

>dotnet tool install -g dotnet-aspnet-codegenerator

o segundo comando, já dentro do projeto MVC desempacota o código responsável pelo registro de um novo usuário 

>dotnet aspnet-codegenerator identity -dc MvcAuth.Data.ApplicationDbContext –files Account.Register

Breve explicação dos comandos: Agora no 2.1 temos uma ferramenta nova que nos ajuda a gerar os códigos default do Identity. Para isso, é necessário informar a namespace + a classe de contexto do EF (Está é a minha no meu projeto AulaMvc.Data.ApplicationDbContext, no seu provavelmente será outra namespace). Como último parâmetro, informamos qual arquivo se deseja gerar.

Para que você possa ver todos os arquivos possíveis de serem gerados o comando abaixo informa isso:

>dotnet aspnet-codegenerator identity –listFiles

Se você notar agora, na pasta “Areas/Identity/Pages” tem uma nova pasta chamada Account, que contempla tudo que é necessário para registrar um novo usuário, você vai ver tanto HTML quando o código .cs.

Se você precisar agora da parte do login, por exemplo, é só fazer o mesmo mas agora –files Account.Login.

Conclusão

Confesso que no começo não havia gostado muito dessa mudança, achei confusa e sem sentido. Mas analisando com mais calma, eu achei legal, porque se você parar para pensar é muito código que os Devs quase não mexem e mesmo assim se tem o trabalho de manter. Claro que isso a equipe da Microsoft só conseguiu com a nova feature que empacota UIs Razor em biblioteca de classe, essa por sinal tem cara que vai ser muito utilizada no futuro.

Fontes:

https://blogs.msdn.microsoft.com/webdev/2018/03/02/aspnetcore-2-1-identity-ui/

https://github.com/dotnet/cli/issues/9518

https://docs.microsoft.com/pt-br/aspnet/core/migration/20_21?view=aspnetcore-2.1

Gostou desse artigo? Que tal fazer um curso legal meu na Udemy?

 

Published in.Net Core

Be First to Comment

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *