{"id":66175,"date":"2024-01-02T15:28:47","date_gmt":"2024-01-02T18:28:47","guid":{"rendered":"https:\/\/kinqsta.com\/pt\/?p=66175&#038;preview=true&#038;preview_id=66175"},"modified":"2024-01-04T09:28:48","modified_gmt":"2024-01-04T12:28:48","slug":"autenticacao-next-js","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/","title":{"rendered":"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js"},"content":{"rendered":"<p>Nos \u00faltimos anos, adicionar autentica\u00e7\u00e3o ao seu aplicativo deixou de ser algo obscuro e complicado e passou a ser algo para o qual voc\u00ea pode literalmente usar apenas uma API.<\/p>\n<p>N\u00e3o faltam exemplos de reposit\u00f3rios e tutoriais sobre como implementar esquemas de autentica\u00e7\u00e3o espec\u00edficos no Next.js, mas h\u00e1 menos informa\u00e7\u00f5es sobre o porqu\u00ea da escolha de esquemas, ferramentas e compensa\u00e7\u00f5es.<\/p>\n<p>Este artigo ir\u00e1 orientar sobre o que considerar ao abordar a autentica\u00e7\u00e3o no Next.js, desde a escolha de um provedor at\u00e9 a constru\u00e7\u00e3o de rotas para login e a decis\u00e3o entre servidor e o lado do cliente.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Escolhendo um m\u00e9todo\/fornecedor de autentica\u00e7\u00e3o<\/h2>\n<p>Existem basicamente 1.000 maneiras de criar autentica\u00e7\u00e3o em seu aplicativo. Em vez de nos concentrarmos em provedores espec\u00edficos (assunto para outro artigo no blog), vamos analisar os <strong>tipos de solu\u00e7\u00f5es de autentica\u00e7\u00e3o<\/strong> e alguns exemplos de cada uma. Em termos de implementa\u00e7\u00e3o, o <a href=\"https:\/\/next-auth.js.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">next-auth<\/a> est\u00e1 se tornando rapidamente uma op\u00e7\u00e3o popular para integrar seu aplicativo Next.js a v\u00e1rios provedores, adicionar SSO, etc.<\/p>\n<h3>Banco de dados tradicional<\/h3>\n<p>Este m\u00e9todo \u00e9 t\u00e3o simples quanto parece: voc\u00ea armazena nomes de usu\u00e1rio e senhas em um banco de dados relacional. Quando um usu\u00e1rio se cadastra pela primeira vez, voc\u00ea insere uma nova linha na tabela <code>users<\/code> com as informa\u00e7\u00f5es fornecidas. Quando eles fazem login, voc\u00ea verifica as credenciais em compara\u00e7\u00e3o com o que est\u00e1 armazenado na tabela. Quando um usu\u00e1rio quer mudar sua senha, voc\u00ea atualiza o valor na tabela.<\/p>\n<p>A autentica\u00e7\u00e3o tradicional com banco de dados \u00e9 certamente o esquema de autentica\u00e7\u00e3o mais popular, considerando a totalidade dos aplicativos existentes e existe basicamente desde sempre. \u00c9 altamente flex\u00edvel, econ\u00f4mica e n\u00e3o te prende a nenhum fornecedor espec\u00edfico. Mas voc\u00ea precisa constru\u00ed-la voc\u00ea mesmo e, em particular, se preocupar com a criptografia e garantir que essas preciosas senhas n\u00e3o caiam em m\u00e3os erradas.<\/p>\n<h3>Solu\u00e7\u00f5es de autentica\u00e7\u00e3o do seu provedor de banco de dados<\/h3>\n<p>Nos \u00faltimos anos (e, para cr\u00e9dito do Firebase, h\u00e1 mais de alguns anos), tornou-se relativamente padr\u00e3o para os provedores de bancos de dados gerenciados oferecer algum tipo de solu\u00e7\u00e3o de autentica\u00e7\u00e3o gerenciada. O <a href=\"https:\/\/firebase.google.com\/docs\/auth\" target=\"_blank\" rel=\"noopener noreferrer\">Firebase<\/a>, o <a href=\"https:\/\/supabase.com\/auth\" target=\"_blank\" rel=\"noopener noreferrer\">Supabase<\/a> e o <a href=\"https:\/\/aws.amazon.com\/cognito\/\" target=\"_blank\" rel=\"noopener noreferrer\">AWS<\/a> oferecem banco de dados gerenciado e autentica\u00e7\u00e3o gerenciada como servi\u00e7o por meio de um conjunto de APIs que abstrai facilmente a cria\u00e7\u00e3o de usu\u00e1rios e o gerenciamento de sess\u00f5es (falaremos mais sobre isso adiante).<\/p>\n<p>Para conectar um usu\u00e1rio com a autentica\u00e7\u00e3o do Supabase, voc\u00ea s\u00f3 precisa <a href=\"https:\/\/supabase.com\/docs\/guides\/auth\/auth-email\" target=\"_blank\" rel=\"noopener noreferrer\">fazer<\/a> o seguinte:<\/p>\n<pre><code class=\"language-javascript\">async function signInWithEmail() {\n  const { data, error } = await supabase.auth.signInWithPassword({\n    email: 'example@email.com',\n    password: 'example-password',\n  })\n}<\/code><\/pre>\n<h3>Solu\u00e7\u00f5es de autentica\u00e7\u00e3o que n\u00e3o s\u00e3o do seu provedor de banco de dados<\/h3>\n<p>Talvez at\u00e9 mais comum do que a autentica\u00e7\u00e3o como um servi\u00e7o do seu DBaaS (Database as a Service) seja a autentica\u00e7\u00e3o como um servi\u00e7o como uma empresa ou produto inteiro. <a href=\"https:\/\/auth0.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Auth0<\/a>, que existe desde 2013 (agora propriedade da Okta), e adi\u00e7\u00f5es recentes como <a href=\"https:\/\/stytch.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Stytch<\/a> t\u00eam priorizado a experi\u00eancia do desenvolvedor e ganhado uma certa relev\u00e2ncia no mercado.<\/p>\n<figure style=\"width: 1244px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/Auth0-authentication.png\" alt=\"Auth0 para autentica\u00e7\u00e3o\" width=\"1244\" height=\"814\"><figcaption class=\"wp-caption-text\">Auth0 para autentica\u00e7\u00e3o<\/figcaption><\/figure>\n<h3>Single Sign-On (SSO)<\/h3>\n<p>O SSO permite que voc\u00ea &#8220;terceirize&#8221; sua identidade para um provedor externo, que pode variar desde um fornecedor focado em seguran\u00e7a empresarial como a <a href=\"https:\/\/www.okta.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Okta<\/a> at\u00e9 algo mais amplamente adotado como o <a href=\"https:\/\/developers.google.com\/identity\/gsi\/web\/guides\/overview\" target=\"_blank\" rel=\"noopener noreferrer\">Google<\/a> ou o GitHub. O SSO do Google \u00e9 onipresente no mundo do SaaS, e algumas ferramentas voltadas para desenvolvedores autenticam apenas via GitHub.<\/p>\n<p>Seja qual for o provedor que voc\u00ea escolher, o SSO geralmente \u00e9 um complemento para os outros tipos de autentica\u00e7\u00e3o acima e tem <a href=\"https:\/\/workos.com\/blog\/the-developers-guide-to-sso\" target=\"_blank\" rel=\"noopener noreferrer\">suas pr\u00f3prias idiossincrasias<\/a> em rela\u00e7\u00e3o \u00e0 integra\u00e7\u00e3o com plataformas externas (aten\u00e7\u00e3o: o SAML usa XML).<\/p>\n<h3>Certo, ent\u00e3o qual deles \u00e9 para mim?<\/h3>\n<p>N\u00e3o h\u00e1 uma escolha &#8220;correta&#8221; aqui &#8211; o que \u00e9 certo para o seu projeto depende de suas prioridades. Se voc\u00ea quiser fazer as coisas andarem rapidamente sem muita configura\u00e7\u00e3o inicial, terceirizar a autentica\u00e7\u00e3o faz sentido (at\u00e9 mesmo terceiriz\u00e1-la completamente, inclusive a interface do usu\u00e1rio, para algu\u00e9m como a Auth0). Se voc\u00ea prev\u00ea uma configura\u00e7\u00e3o mais complexa, faz sentido criar seu pr\u00f3prio backend de autentica\u00e7\u00e3o. E se voc\u00ea pretende dar suporte a clientes maiores, precisar\u00e1 adicionar o SSO em algum momento.<\/p>\n<p>O Next.js \u00e9 t\u00e3o popular neste momento que a maioria desses provedores de autentica\u00e7\u00e3o tem documentos e guias de integra\u00e7\u00e3o espec\u00edficos para o Next.js.<\/p>\n<h2>Criando rotas para inscri\u00e7\u00e3o e login, e dicas para voc\u00ea ir al\u00e9m da autentica\u00e7\u00e3o<\/h2>\n<p>Alguns provedores de autentica\u00e7\u00e3o, como Auth0, na verdade, fornecem p\u00e1ginas web hospedadas inteiras para cadastro e login. Mas se voc\u00ea est\u00e1 construindo essas p\u00e1ginas do zero, eu acho \u00fatil cri\u00e1-las no in\u00edcio do processo, j\u00e1 que voc\u00ea precisar\u00e1 delas para fornecer como redirecionamentos quando realmente implementar sua autentica\u00e7\u00e3o.<\/p>\n<p>Portanto, faz sentido criar a estrutura para essas p\u00e1ginas e, depois, adicionar as solicita\u00e7\u00f5es ao backend posteriormente. A maneira mais direta de implementar a autentica\u00e7\u00e3o \u00e9 ter duas dessas rotas:<\/p>\n<ul>\n<li>Uma para <strong>registro<\/strong><\/li>\n<li>Outra para fazer <strong>login<\/strong> quando o usu\u00e1rio j\u00e1 tiver uma conta<\/li>\n<\/ul>\n<p>Al\u00e9m do b\u00e1sico, voc\u00ea precisar\u00e1 cobrir casos extremos, como quando um usu\u00e1rio esquece a senha. Algumas equipes preferem ter o processo de redefini\u00e7\u00e3o de senha em uma rota separada, enquanto outras adicionam elementos din\u00e2micos de interface do usu\u00e1rio (UI) \u00e0 p\u00e1gina regular de login.<\/p>\n<p>Uma boa p\u00e1gina de inscri\u00e7\u00e3o pode n\u00e3o significar a diferen\u00e7a entre o sucesso e o fracasso, mas pequenos toques podem deixar uma boa impress\u00e3o e, em geral, proporcionar uma experi\u00eancia do usu\u00e1rio melhor. Aqui est\u00e3o alguns exemplos de sites da web que deram um toque especial aos seus processos de autentica\u00e7\u00e3o.<\/p>\n<h3>1. Atualize sua barra de navega\u00e7\u00e3o se houver uma sess\u00e3o ativa<\/h3>\n<p>O call to action na barra de navega\u00e7\u00e3o da Stripe muda com base em se voc\u00ea tem uma sess\u00e3o autenticada ou n\u00e3o. Veja como fica o site de marketing se voc\u00ea n\u00e3o estiver autenticado. Observe o call to action para fazer login:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/stripe-homepage.png\" alt=\"A p\u00e1gina inicial do Stripe altera o CTA com base no fato de voc\u00ea estar autenticado.\" width=\"1999\" height=\"1191\"><figcaption class=\"wp-caption-text\">A p\u00e1gina inicial do Stripe altera o CTA com base no fato de voc\u00ea estar autenticado.<\/figcaption><\/figure>\n<p>E aqui est\u00e1 a apar\u00eancia se voc\u00ea estiver autenticado. Observe que o Call to Action muda para levar o usu\u00e1rio ao painel de controle em vez de fazer login:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/stripe-homepage-changes.png\" alt=\"Mudan\u00e7as na p\u00e1gina inicial do Stripe.\" width=\"1999\" height=\"1176\"><figcaption class=\"wp-caption-text\">Mudan\u00e7as na p\u00e1gina inicial do Stripe.<\/figcaption><\/figure>\n<p>Isso n\u00e3o muda fundamentalmente minha experi\u00eancia com o Stripe, mas \u00e9 bom.<\/p>\n<p>Uma observa\u00e7\u00e3o t\u00e9cnica interessante: h\u00e1 um bom motivo para que a maioria das empresas n\u00e3o fa\u00e7a com que a barra de navega\u00e7\u00e3o em seu site de marketing &#8220;dependa&#8221; da autentica\u00e7\u00e3o &#8211; isso significaria uma solicita\u00e7\u00e3o de API extra para verificar o estado autenticado em cada carregamento de p\u00e1gina, a maioria dos quais s\u00e3o para visitantes que provavelmente n\u00e3o s\u00e3o.<\/p>\n<h3>2. Adicione algum conte\u00fado \u00fatil junto com o formul\u00e1rio de inscri\u00e7\u00e3o<\/h3>\n<p>Nos \u00faltimos anos, especialmente em SaaS, as empresas come\u00e7aram a adicionar conte\u00fado \u00e0 p\u00e1gina de inscri\u00e7\u00e3o para &#8220;incentivar&#8221; o usu\u00e1rio a realmente concluir a inscri\u00e7\u00e3o. Isso pode ajudar a melhorar sua convers\u00e3o na p\u00e1gina, pelo menos de forma incremental.<\/p>\n<p>Aqui est\u00e1 uma p\u00e1gina de inscri\u00e7\u00e3o da Retool, com uma anima\u00e7\u00e3o e alguns logos na lateral:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/retool-signup-page.png\" alt=\"Se voc\u00ea for fazer isso, tente garantir que as fontes de cada lado sejam iguais.\" width=\"1999\" height=\"1083\"><figcaption class=\"wp-caption-text\">Se voc\u00ea for fazer isso, tente garantir que as fontes de cada lado sejam iguais.<\/figcaption><\/figure>\n<p>Tamb\u00e9m fazemos isso na Kinsta para nossa p\u00e1gina de inscri\u00e7\u00e3o:<\/p>\n<figure style=\"width: 1999px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/mykinsta-sign-in.png\" alt=\"P\u00e1gina de registro da Kinsta\" width=\"1999\" height=\"1174\"><figcaption class=\"wp-caption-text\">P\u00e1gina de registro da Kinsta<\/figcaption><\/figure>\n<p>O conte\u00fado extra pode ajudar a lembrar o usu\u00e1rio do motivo pelo qual ele est\u00e1 assinando e por que ele precisa disso.<\/p>\n<h3>3. Se voc\u00ea estiver usando uma senha: sugira ou imponha uma senha forte<\/h3>\n<p>Sinto-me \u00e0 vontade para dizer que \u00e9 de conhecimento comum entre os desenvolvedores que as senhas s\u00e3o inerentemente inseguras, mas <em>n\u00e3o<\/em> \u00e9 de conhecimento comum entre todas as pessoas que se inscrever\u00e3o no seu produto. Incentivar seus usu\u00e1rios a criar senhas seguras \u00e9 bom para voc\u00ea e bom para eles.<\/p>\n<p>A Coinbase \u00e9 bastante rigorosa com a inscri\u00e7\u00e3o e exige que voc\u00ea use uma senha segura que seja mais complicada do que apenas seu primeiro nome:<\/p>\n<figure style=\"width: 1428px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/coinbase-create-account.png\" alt=\"Senha fraca na Coinbase.\" width=\"1428\" height=\"1494\"><figcaption class=\"wp-caption-text\">Senha fraca na Coinbase.<\/figcaption><\/figure>\n<p>Depois de gerar uma senha com meu gerenciador de senhas, eu estava pronto para come\u00e7ar:<\/p>\n<figure style=\"width: 1464px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/11\/coinbase-password-strength.png\" alt=\"Senha forte na Coinbase.\" width=\"1464\" height=\"1462\"><figcaption class=\"wp-caption-text\">Senha forte na Coinbase.<\/figcaption><\/figure>\n<p>A interface do usu\u00e1rio n\u00e3o me informou por que a senha n\u00e3o era segura o suficiente, nem quaisquer requisitos al\u00e9m de ter um n\u00famero. Incluir essas informa\u00e7\u00f5es no texto do seu produto tornar\u00e1 as coisas mais f\u00e1ceis para o usu\u00e1rio e ajudar\u00e1 a evitar a frustra\u00e7\u00e3o de ter que tentar outra senha.<\/p>\n<h3>4. Rotule suas entradas para que elas funcionem bem com um gerenciador de senhas<\/h3>\n<p>Um em cada tr\u00eas americanos usa um gerenciador de senhas como o <a href=\"https:\/\/1password.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">1Password<\/a> e, mesmo assim, muitos formul\u00e1rios na web continuam a ignorar o `type=` nas entradas HTML. <a href=\"https:\/\/hidde.blog\/making-password-managers-play-ball-with-your-login-form\/\" target=\"_blank\" rel=\"noopener noreferrer\">Fa\u00e7a com que seus formul\u00e1rios sejam compat\u00edveis com os gerenciadores de senhas<\/a>:<\/p>\n<ul>\n<li>Coloque seus elementos de entrada em um elemento de formul\u00e1rio<\/li>\n<li>D\u00ea \u00e0s entradas um tipo e um r\u00f3tulo<\/li>\n<li>Adicione recursos de preenchimento autom\u00e1tico \u00e0s suas entradas<\/li>\n<li>N\u00e3o adicione campos dinamicamente (estou olhando para voc\u00ea, <a href=\"https:\/\/www.reddit.com\/r\/delta\/comments\/f8s1sq\/why_does_the_delta_website_require_my_last_name\/\" target=\"_blank\" rel=\"noopener noreferrer\">Delta<\/a>)<\/li>\n<\/ul>\n<p>Isso pode fazer a diferen\u00e7a entre um login de 10 segundos incrivelmente f\u00e1cil e um login manual irritante, especialmente em dispositivos m\u00f3veis.<\/p>\n<h2><strong>Escolhendo entre sess\u00f5es e JWT<\/strong><\/h2>\n<p>Depois que o usu\u00e1rio se autentica, voc\u00ea precisa escolher uma estrat\u00e9gia para manter esse estado nas solicita\u00e7\u00f5es subsequentes. O HTTP n\u00e3o tem estado e certamente n\u00e3o queremos pedir a senha do usu\u00e1rio em cada solicita\u00e7\u00e3o. H\u00e1 <a href=\"https:\/\/stytch.com\/blog\/jwts-vs-sessions-which-is-right-for-you\/\" target=\"_blank\" rel=\"noopener noreferrer\">dois m\u00e9todos populares para lidar com isso<\/a> &#8211; <strong>sess\u00f5es<\/strong> (ou cookies) e <strong>JWTs<\/strong> (tokens da Web JSON) &#8211; e eles diferem em termos se o servidor ou o cliente faz o trabalho.<\/p>\n<h3>Sess\u00f5es, tamb\u00e9m conhecidas como cookies<\/h3>\n<p>Na autentica\u00e7\u00e3o baseada em sess\u00e3o, a l\u00f3gica e o trabalho para manter a autentica\u00e7\u00e3o s\u00e3o tratados pelo <strong>servidor<\/strong>. Aqui est\u00e1 o fluxo b\u00e1sico:<\/p>\n<ol start=\"1\">\n<li>O usu\u00e1rio se autentica por meio da p\u00e1gina de login.<\/li>\n<li><strong>O servidor cria um registro<\/strong> que representa essa &#8220;sess\u00e3o&#8221; de navega\u00e7\u00e3o espec\u00edfica Normalmente, esse registro \u00e9 inserido em um banco de dados com um identificador aleat\u00f3rio e detalhes sobre a sess\u00e3o, como quando ela come\u00e7ou e quando expira.<\/li>\n<li>Esse identificador aleat\u00f3rio &#8211; algo como `6982e583b1874abf9078e1d1dd5442f1` &#8211; \u00e9 enviado ao seu navegador e <strong>armazenado como um cookie<\/strong>.<\/li>\n<li>Nas solicita\u00e7\u00f5es subsequentes do cliente, o identificador est\u00e1 inclu\u00eddo\u00a0 e <strong>verificado na tabela de sess\u00f5es<\/strong> do banco de dados.<\/li>\n<\/ol>\n<p>\u00c9 bastante simples e pode ser ajustado em rela\u00e7\u00e3o ao tempo de dura\u00e7\u00e3o das sess\u00f5es, quando elas devem ser revogadas, etc. A desvantagem \u00e9 a lat\u00eancia em uma escala significativa, considerando todas as grava\u00e7\u00f5es e leituras no banco de dados, mas isso pode n\u00e3o ser uma considera\u00e7\u00e3o importante para a maioria dos leitores.<\/p>\n<h3>Tokens da Web JSON (JWT)<\/h3>\n<p>Em vez de lidar com a autentica\u00e7\u00e3o para solicita\u00e7\u00f5es subsequentes no servidor, os <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc7519\" target=\"_blank\" rel=\"noopener noreferrer\">JWTs<\/a> permitem que voc\u00ea lide com elas (principalmente) no <strong>lado do cliente<\/strong>. Veja como funciona:<\/p>\n<ol start=\"1\">\n<li>O usu\u00e1rio se autentica por meio da p\u00e1gina de login.<\/li>\n<li><strong>O servidor gera um JWT<\/strong> que cont\u00e9m a identidade do usu\u00e1rio, as permiss\u00f5es que lhe foram concedidas e uma data de validade (entre outras coisas).<\/li>\n<li><strong>O servidor assina esse token<\/strong>, criptografa o conte\u00fado dele e envia tudo para o cliente.<\/li>\n<li>Para cada solicita\u00e7\u00e3o, o cliente pode <strong>descriptografar o token<\/strong> e verificar se o usu\u00e1rio tem permiss\u00e3o para fazer a solicita\u00e7\u00e3o (tudo sem precisar se comunicar com o servidor).<\/li>\n<\/ol>\n<p>Com todo o trabalho de autentica\u00e7\u00e3o p\u00f3s-inicial transferido para o cliente, seu aplicativo pode ser carregado e funcionar muito mais r\u00e1pido. Mas h\u00e1 um problema principal: n\u00e3o h\u00e1 como invalidar um JWT do servidor. Se o usu\u00e1rio quiser fazer logout de um dispositivo ou se o escopo da autoriza\u00e7\u00e3o mudar, voc\u00ea precisar\u00e1 esperar at\u00e9 que o JWT expire.<\/p>\n<h2>Escolhendo entre a autentica\u00e7\u00e3o do lado do servidor e do lado do cliente<\/h2>\n<p>Parte do que torna o Next.js excelente \u00e9 a renderiza\u00e7\u00e3o est\u00e1tica integrada &#8211; se a sua p\u00e1gina for est\u00e1tica, ou seja, n\u00e3o precisar fazer nenhuma chamada de API externa, o Next.js a armazenar\u00e1 automaticamente em cache e poder\u00e1 servi-la com extrema rapidez por meio de uma CDN. A vers\u00e3o anterior ao Next.js 13 sabe se uma p\u00e1gina \u00e9 est\u00e1tica se voc\u00ea n\u00e3o incluir nenhum `getServerSideProps` ou `getInitialProps` no arquivo, enquanto as vers\u00f5es posteriores ao Next.js 13 usam o <a href=\"https:\/\/nextjs.org\/docs\/app\/building-your-application\/rendering\/server-components\" target=\"_blank\" rel=\"noopener noreferrer\">React Server Components<\/a> para fazer isso.<\/p>\n<p>Para autentica\u00e7\u00e3o, <a href=\"https:\/\/nextjs.org\/docs\/pages\/building-your-application\/routing\/authenticating\" target=\"_blank\" rel=\"noopener noreferrer\">voc\u00ea tem uma op\u00e7\u00e3o<\/a>: renderizar uma p\u00e1gina est\u00e1tica de &#8220;carregamento&#8221; e fazer a busca no lado do cliente ou fazer tudo no lado do servidor. Para p\u00e1ginas que exigem autentica\u00e7\u00e3o <a href=\"#ftnt1\">[1]<\/a>, voc\u00ea pode renderizar um &#8220;<strong>skeleton<\/strong>&#8221; est\u00e1tico e, em seguida, fazer solicita\u00e7\u00f5es de autentica\u00e7\u00e3o no lado do cliente. Em teoria, isso significa que a p\u00e1gina \u00e9 carregada mais rapidamente, mesmo que o conte\u00fado inicial n\u00e3o esteja totalmente pronto para ser usado.<\/p>\n<p>Aqui est\u00e1 um exemplo simplificado da documenta\u00e7\u00e3o que renderiza um estado de carregamento, desde que o objeto do usu\u00e1rio n\u00e3o esteja pronto:<\/p>\n<pre><code class=\"language-javascript\">import useUser from '..\/lib\/useUser'\n \nconst Profile = () =&gt; {\n  \/\/ Fetch the user client-side\n  const { user } = useUser({ redirectTo: '\/login' })\n \n  \/\/ Server-render loading state\n  if (!user || user.isLoggedIn === false) {\n    \/\/ Build some sort of loading page here\n    return &lt;div&gt;Loading...&lt;\/div&gt;\n  }\n \n  \/\/ Once the user request finishes, show the user\n  return (\n    &lt;div&gt;\n      &lt;h1&gt;Your Account&lt;\/h1&gt;\n      &lt;p&gt;Username: {JSON.stringify(user.username,null)}&lt;\/p&gt;\n      &lt;p&gt;Email: {JSON.stringify(user.email,null)}&lt;\/p&gt;\n      &lt;p&gt;Address: {JSON.stringify(user.address,null)}&lt;\/p&gt;\n    &lt;\/div&gt;\n  )\n}\n \nexport default Profile<\/code><\/pre>\n<p>Observe que voc\u00ea precisaria criar algum tipo de interface do usu\u00e1rio (UI) de carregamento aqui para manter o espa\u00e7o enquanto o cliente faz solicita\u00e7\u00f5es ap\u00f3s o carregamento.<\/p>\n<p>Se quiser simplificar as coisas e executar a autentica\u00e7\u00e3o no lado do servidor, voc\u00ea poder\u00e1 adicionar sua solicita\u00e7\u00e3o de autentica\u00e7\u00e3o \u00e0 fun\u00e7\u00e3o `getServerSideProps`, e o Next aguardar\u00e1 para renderizar a p\u00e1gina at\u00e9 que a solicita\u00e7\u00e3o seja conclu\u00edda. Em vez da l\u00f3gica condicional no snippet acima, voc\u00ea executaria algo mais simples, como esta vers\u00e3o simplificada dos documentos do Next:<\/p>\n<pre><code class=\"language-javascript\">import withSession from '..\/lib\/session'\n \nexport const getServerSideProps = withSession(async function ({ req, res }) {\n  const { user } = req.session\n \n  if (!user) {\n    return {\n      redirect: {\n        destination: '\/login',\n        permanent: false,\n      },\n    }\n  }\n \n  return {\n    props: { user },\n  }\n})\n \nconst Profile = ({ user }) =&gt; {\n  \/\/ Show the user. No loading state is required\n  return (\n    &lt;div&gt;\n      &lt;h1&gt;Your Account&lt;\/h1&gt;\n      &lt;p&gt;Username: {JSON.stringify(user.username,null)}&lt;\/p&gt;\n      &lt;p&gt;Email: {JSON.stringify(user.email,null)}&lt;\/p&gt;\n      &lt;p&gt;Address: {JSON.stringify(user.address,null)}&lt;\/p&gt;\n    &lt;\/div&gt;\n  )\n}\n \nexport default Profile<\/code><\/pre>\n<p>A l\u00f3gica presente ainda trata casos de falha na autentica\u00e7\u00e3o, mas redireciona para a tela de login ao inv\u00e9s de exibir um estado de carregamento.<\/p>\n<h2>Resumo<\/h2>\n<p>Ent\u00e3o, qual dessas op\u00e7\u00f5es \u00e9 a certa para o seu projeto? Comece avaliando o grau de confian\u00e7a que voc\u00ea tem na velocidade do seu esquema de autentica\u00e7\u00e3o. Se as solicita\u00e7\u00f5es n\u00e3o estiverem demorando nada, voc\u00ea poder\u00e1 execut\u00e1-las no lado do servidor e evitar o estado de carregamento. Se voc\u00ea quiser priorizar a renderiza\u00e7\u00e3o imediata de <em>algo<\/em> e depois aguardar a solicita\u00e7\u00e3o, ignore o `getServerSideProps` e execute a autentica\u00e7\u00e3o em outro lugar.<\/p>\n<p><a href=\"#ftnt_ref1\">[1]<\/a> Quando voc\u00ea usa o Next, esse \u00e9 um bom motivo para n\u00e3o exigir a autentica\u00e7\u00e3o em todas as p\u00e1ginas. \u00c9 mais simples fazer isso, mas significa que voc\u00ea perde os benef\u00edcios de desempenho da estrutura da web em primeiro lugar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nos \u00faltimos anos, adicionar autentica\u00e7\u00e3o ao seu aplicativo deixou de ser algo obscuro e complicado e passou a ser algo para o qual voc\u00ea pode literalmente &#8230;<\/p>\n","protected":false},"author":310,"featured_media":66176,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[977,1002],"class_list":["post-66175","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-frameworks-javascript","topic-react"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Ao escolher um provedor e construir rotas para login, h\u00e1 v\u00e1rias coisas a considerar ao configurar a autentica\u00e7\u00e3o no Next.js.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js\" \/>\n<meta property=\"og:description\" content=\"Ao escolher um provedor e construir rotas para login, h\u00e1 v\u00e1rias coisas a considerar ao configurar a autentica\u00e7\u00e3o no Next.js.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-02T18:28:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-04T12:28:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Justin Gage\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Ao escolher um provedor e construir rotas para login, h\u00e1 v\u00e1rias coisas a considerar ao configurar a autentica\u00e7\u00e3o no Next.js.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Justin Gage\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/\"},\"author\":{\"name\":\"Justin Gage\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f\"},\"headline\":\"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js\",\"datePublished\":\"2024-01-02T18:28:47+00:00\",\"dateModified\":\"2024-01-04T12:28:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/\"},\"wordCount\":2595,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/\",\"name\":\"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"datePublished\":\"2024-01-02T18:28:47+00:00\",\"dateModified\":\"2024-01-04T12:28:48+00:00\",\"description\":\"Ao escolher um provedor e construir rotas para login, h\u00e1 v\u00e1rias coisas a considerar ao configurar a autentica\u00e7\u00e3o no Next.js.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frameworks JavaScript\",\"item\":\"https:\/\/kinqsta.com\/pt\/topicos\/frameworks-javascript\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#website\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f\",\"name\":\"Justin Gage\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/204874e8a52203e297ea240336c356ba?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/204874e8a52203e297ea240336c356ba?s=96&d=mm&r=g\",\"caption\":\"Justin Gage\"},\"description\":\"Justin is a technical writer and author of the popular Technically newsletter. He did his B.S. in Data Science before a stint in full-stack engineering and now focuses on making complex technical concepts accessible to everyone.\",\"sameAs\":[\"https:\/\/technically.substack.com\/\"],\"url\":\"https:\/\/kinqsta.com\/pt\/blog\/author\/justingage\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js - Kinsta\u00ae","description":"Ao escolher um provedor e construir rotas para login, h\u00e1 v\u00e1rias coisas a considerar ao configurar a autentica\u00e7\u00e3o no Next.js.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/","og_locale":"pt_PT","og_type":"article","og_title":"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js","og_description":"Ao escolher um provedor e construir rotas para login, h\u00e1 v\u00e1rias coisas a considerar ao configurar a autentica\u00e7\u00e3o no Next.js.","og_url":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2024-01-02T18:28:47+00:00","article_modified_time":"2024-01-04T12:28:48+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","type":"image\/jpeg"}],"author":"Justin Gage","twitter_card":"summary_large_image","twitter_description":"Ao escolher um provedor e construir rotas para login, h\u00e1 v\u00e1rias coisas a considerar ao configurar a autentica\u00e7\u00e3o no Next.js.","twitter_image":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Justin Gage","Tempo estimado de leitura":"13 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/"},"author":{"name":"Justin Gage","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f"},"headline":"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js","datePublished":"2024-01-02T18:28:47+00:00","dateModified":"2024-01-04T12:28:48+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/"},"wordCount":2595,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/","url":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/","name":"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinqsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","datePublished":"2024-01-02T18:28:47+00:00","dateModified":"2024-01-04T12:28:48+00:00","description":"Ao escolher um provedor e construir rotas para login, h\u00e1 v\u00e1rias coisas a considerar ao configurar a autentica\u00e7\u00e3o no Next.js.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#primaryimage","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/considerations-when-setting-up-authentication-in-next-js.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/pt\/blog\/autenticacao-next-js\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Frameworks JavaScript","item":"https:\/\/kinqsta.com\/pt\/topicos\/frameworks-javascript\/"},{"@type":"ListItem","position":3,"name":"Considera\u00e7\u00f5es ao Configurar a Autentica\u00e7\u00e3o no Next.js"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/pt\/#website","url":"https:\/\/kinqsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinqsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/9c79ef0f55180723ff2b31baffe9070f","name":"Justin Gage","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinqsta.com\/pt\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/204874e8a52203e297ea240336c356ba?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/204874e8a52203e297ea240336c356ba?s=96&d=mm&r=g","caption":"Justin Gage"},"description":"Justin is a technical writer and author of the popular Technically newsletter. He did his B.S. in Data Science before a stint in full-stack engineering and now focuses on making complex technical concepts accessible to everyone.","sameAs":["https:\/\/technically.substack.com\/"],"url":"https:\/\/kinqsta.com\/pt\/blog\/author\/justingage\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/66175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/users\/310"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/comments?post=66175"}],"version-history":[{"count":9,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/66175\/revisions"}],"predecessor-version":[{"id":66257,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/posts\/66175\/revisions\/66257"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66175\/translations\/en"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66175\/translations\/fr"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66175\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66175\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66175\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66175\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66175\/translations\/es"},{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/66175\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media\/66176"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/media?parent=66175"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/tags?post=66175"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/pt\/wp-json\/wp\/v2\/topic?post=66175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}