<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leonardo Oliveira Balsalobre</title>
    <description>The latest articles on DEV Community by Leonardo Oliveira Balsalobre (@oliveirabalsa).</description>
    <link>https://dev.to/oliveirabalsa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F406868%2F80c07331-f780-4603-b12e-6906108c4173.jpeg</url>
      <title>DEV Community: Leonardo Oliveira Balsalobre</title>
      <link>https://dev.to/oliveirabalsa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oliveirabalsa"/>
    <language>en</language>
    <item>
      <title>Implementando JWT com Deno e ABC</title>
      <dc:creator>Leonardo Oliveira Balsalobre</dc:creator>
      <pubDate>Thu, 11 Jun 2020 14:39:26 +0000</pubDate>
      <link>https://dev.to/deno/implementando-jwt-com-deno-e-abc-2i7f</link>
      <guid>https://dev.to/deno/implementando-jwt-com-deno-e-abc-2i7f</guid>
      <description>&lt;p&gt;Conforme temos visto nos ultimo meses, o novo runtime feito por Ryan Dahl (criador do Node) vem tomando espaço no cronograma de estudos de diversos desenvolvedores e entusiastas.&lt;/p&gt;

&lt;p&gt;Mas o que é o Deno?&lt;/p&gt;

&lt;p&gt;Deno visa fornecer um ambiente de script produtivo e seguro para o programador moderno. Ele é construído sobre V8, Rust e TypeScript.&lt;/p&gt;

&lt;p&gt;A principal característica que chamou atenção no novo runtime, foi a forma com qual foi construído, sempre buscando tornar o acesso e o trafego dos dados mais seguro.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;p&gt;Em Node, para iniciarmos um servidor executamos "npm start" ou "npm run dev", de uma forma simples e imediata o seu servidor ja está rodando.&lt;/p&gt;

&lt;p&gt;Já no Deno, é necessário dar permissão para que ele acesse sua internet(--allow-net), escrita(--allow-write), leitura(--alow-read), entre outros(--allow-all). E para aprimorar ainda mais nossa segurança iremos utilizar o famoso JWT.&lt;/p&gt;

&lt;p&gt;Bora para o que interessa!&lt;/p&gt;

&lt;p&gt;Nesse projeto usaremos as seguintes bibliotecas:&lt;/p&gt;

&lt;p&gt;Framework ABC: &lt;a href="https://deno.land/x/abc"&gt;https://deno.land/x/abc&lt;/a&gt;&lt;br&gt;
Bcrypt: &lt;a href="https://deno.land/x/bcrypt"&gt;https://deno.land/x/bcrypt&lt;/a&gt;&lt;br&gt;
Djwt: &lt;a href="https://deno.land/x/djwt"&gt;https://deno.land/x/djwt&lt;/a&gt;&lt;br&gt;
Mongo: &lt;a href="https://deno.land/x/mongo"&gt;https://deno.land/x/mongo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primeiramente vocês vão precisar baixar as dependências....&lt;/p&gt;

&lt;p&gt;Só que não! O Deno importa suas dependências diretamente da sua raiz e assim não existe nenhum node_modules com alguns milhares de megabytes.&lt;/p&gt;

&lt;p&gt;Ao iniciarmos a construção da nossa API, a primeira coisa que vamos fazer é criar um endpoint de usuário e como o Deno ja suporta Typescript por padrão então iremos utiliza-lo ;D&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Primeiramente importamos HandlerFunc e Context que são premissas para criarmos as funções utilizando o framework ABC (também temos o Oak que tem uma similaridade com Koa)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Após importarmos note que estamos importando diretamente do deno.land, isso significa que ao iniciarmos o servidor o Deno irá baixar as dependências e armazená-las em um cache, mas isso é assunto para um outro artigo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3TuJfKpP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/leaea9b7luuqtlw8g2ep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3TuJfKpP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/leaea9b7luuqtlw8g2ep.png" alt="Criando usuário"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Também importaremos o bcrypt que é uma biblioteca para gerar hash da senha do usuário aumentando ainda mais a segurança da nossa API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Em seguida iremos criar nosso token.ts que é a configuração da autenticação do JWT que será usada no projeto. Note que na expiração colocamos a data atual mais 60 * 60000 que significa 1 hora, onde 60000 é 1 minuto.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5Q-wKFCV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vxxqc7c5znlii7n6jtfg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5Q-wKFCV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vxxqc7c5znlii7n6jtfg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Após nosso token estar totalmente configurado iremos fazer uma controller que se chamará authController.ts, ela será a responsável por interceptar todas as requisições da nossa API, sendo usada como um middleware. Outro ponto que gostaria de comentar é que ao construir esse projeto procurei inúmeras formas de validar quais rotas teriam acesso sem que o interceptador de token entrasse em vigor. A única forma com qual consegui foi buscando dentro do contexto da requisição qual é o path da rota, sendo assim fiz um if para que caso a rota não fosse a que eu queria, o interceptador seria executado, do contrario, a rota estaria livre de token, que é o cenário que queremos no caso de login.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vHryrp4a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rynubiia3bx2i9n0d9hq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vHryrp4a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rynubiia3bx2i9n0d9hq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Por fim iremos no nosso server.ts fazer com que nosso app use o authController como middleware.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AFbPvmWB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uzuu3weriv0jvou835ay.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AFbPvmWB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uzuu3weriv0jvou835ay.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Considerações finais&lt;br&gt;
Para quem não tem conhecimento em API's ou até mesmo em Deno básico, talvez esse artigo não seja tão útil, mas a intenção foi passar o conhecimento de como utilizei o ABC para fazer uma autenticação JWT, até o momento em que fiz esse mini-projeto não havia encontrado em lugar algum da internet uma autenticação JWT que não usasse o Oak.&lt;/p&gt;

&lt;p&gt;Para fins de duvidas, estou disponibilizando meu repositório que é exatamente esse da imagem onde tenho um Crud completo de usuário com bcrypt e JWT implementados.&lt;/p&gt;

&lt;p&gt;Link do repositório: &lt;a href="https://github.com/oliveirabalsa/deno-demo"&gt;https://github.com/oliveirabalsa/deno-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por enquanto é isso e nos vemos em breve, dúvidas ou sugestão deixem nos comentários ou nos procure nas redes Sociais!&lt;/p&gt;

&lt;p&gt;Acompanhe nossos canais de conteúdo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCCnvFA6ZShN67V54UsytH0g"&gt;Youtube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/DenoLandBR"&gt;Pagina Facebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.facebook.com/groups/denobr"&gt;Grupo Facebook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://discord.gg/Z35yKzN"&gt;Discord&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>deno</category>
      <category>typescript</category>
      <category>rust</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
