Lembre-se da série de tutoriais que escrevi com relação a Criação de um armazenamento de perfil de usuário com Node.js e NoSQL? Esse tutorial cobriu uma série de assuntos, desde a criação de uma API RESTful com Node.js, o tratamento de sessões de usuários, a modelagem de dados e, é claro, o armazenamento de dados associados aos usuários.

E se quiséssemos usar os mesmos conceitos e aplicá-los com Golang em vez de JavaScript com Node.js?

Veremos como desenvolver um armazenamento de perfil de usuário com Golang e Servidor Couchbase que atua como um substituto modular para a alternativa do Node.js.

Daqui para frente, vamos supor que você tenha o Go instalado e configurado, bem como o Couchbase Server. Não é importante se você já viu a instrução Versão Node.js deste tutorial porque vamos revisar tudo.

Caso você não saiba o que é um armazenamento de perfil de usuário ou o que ele faz, trata-se simplesmente de uma solução para armazenar informações sobre usuários e informações associadas a eles. Veja, por exemplo, um blog. Um blog pode ter vários autores, que são tecnicamente usuários. Cada autor escreverá conteúdo e esse conteúdo será associado ao usuário específico que o escreveu. Cada autor também terá seu próprio método de login no blog.

Como os modelos de dados do usuário podem mudar com muita frequência, o uso de um banco de dados NoSQL com um modelo de armazenamento flexível costuma ser mais eficaz do que uma alternativa RDBMS. Mais informações sobre o aspecto da modelagem de dados podem ser encontradas neste artigo, Armazenamento de perfil de usuário: Modelagem avançada de dados, escrito por Kirk Kirkconnell.

Gerenciamento de usuários Golang para criar um novo projeto

Vamos passar todo o tempo em um único arquivo Go. Em algum lugar em seu $GOPATH, crie um arquivo chamado main.go.

Também precisaremos de algumas dependências, tanto para o Couchbase quanto para outros pacotes. Na linha de comando, execute o seguinte:

As dependências acima permitirão que nos comuniquemos com o Couchbase Server, geremos valores de UUID e criemos uma API RESTful com tratamento de compartilhamento de recursos entre origens (CORS).

A próxima etapa é criar um código padrão para o nosso projeto. Abra a seção main.go e inclua o seguinte:

No exemplo acima, você notará que criamos algumas estruturas de dados para representar nossos dados. Estamos adotando a ideia de uma plataforma de blog.

O aplicativo terá cinco pontos de extremidade da API RESTful, um método validador para nossas sessões de usuário e uma variável global do Couchbase que nos permitirá acessar nossa instância aberta em qualquer lugar do aplicativo.

Observe que os três pontos de extremidade acima têm o Validar anexada a eles. Isso significa que o usuário deve ter se autenticado e estar fornecendo uma sessão válida para progredir. Nesse sentido, o Validar atua como um middleware.

Como planejamos consultar os dados, mais especificamente, os artigos do blog para um determinado usuário, precisamos criar um índice. Usando o painel da Web, a CLI do Couchbase ou o aplicativo Go, execute o seguinte:

O índice acima nos permitirá consultar por um tipo bem como uma propriedade pid propriedade.

Agora podemos começar a preencher as lacunas de cada um de nossos endpoints de API.

Permitir que os usuários registrem novas informações no Profile Store

Como não temos usuários no armazenamento de perfis até o momento, faria sentido criar um ponto de extremidade que ofereça suporte à criação de novos usuários.

É uma boa prática nunca armazenar informações de credenciais do tipo nome de usuário e senha com informações reais do usuário. Por esse motivo, criar um novo usuário significa criar um perfil bem como um documento conta documento. O conta fará referência ao documento perfil document. Ambos serão modelados de acordo com nossas estruturas de dados Go que vimos no código padrão.

No main.go adicione o seguinte:

Há algumas coisas importantes acontecendo no código do endpoint acima.

Primeiro, estamos aceitando os dados JSON que foram enviados com o corpo POST da solicitação do cliente. Estamos gerando um ID exclusivo para o perfil documento e fazer o hash da senha para mantê-la em segurança com o BCrypt.

Quando se trata de realmente salvar os dados, o perfil do usuário receberá uma identificação exclusiva, enquanto a conta receberá um endereço de e-mail como identificação e uma referência à identificação do perfil no documento.

Ao seguir essa abordagem, a conta pode ser facilmente ampliado para outras formas de credenciais. Por exemplo, o documento da conta poderia ser renomeado como basicauthe poderíamos ter o Facebook, o Twitter, etc., que fazem referência às informações do perfil.

Implementação de um token de sessão para usuários

Fazer login no aplicativo por meio de nossos dois documentos é um pouco diferente. Nunca é uma boa ideia divulgar o nome de usuário e a senha mais do que o absolutamente necessário.

Por esse motivo, é uma boa ideia usar um token de sessão que represente o usuário. Esse token pode expirar e não contém informações confidenciais.

Use o seguinte código de login para o main.go file:

Quando o e-mail e a senha são passados para esse ponto de extremidade, o conta é recuperado com base no e-mail que foi fornecido. A senha com hash dentro desse documento é então comparada com a senha sem hash.

Se as credenciais forem válidas, um sessão é criado. Esse documento de sessão tem uma chave exclusiva, mas faz referência à chave do perfil documento. Um tempo de expiração também é adicionado ao documento. Quando o tempo de expiração passar, o documento será automaticamente removido do Couchbase sem qualquer intervenção do aplicativo ou do usuário. Isso ajuda a proteger a conta.

Com as contas funcionais, precisamos nos preocupar em associar informações aos usuários.

Gerenciamento de informações do usuário no Profile Store por meio de um token de sessão

Quando um usuário tenta fazer algo específico para si mesmo, precisamos validar se ele é quem deveria ser e se as informações que está alterando são aplicadas à pessoa correta.

É nesse ponto que o middleware de validação de token de sessão entra em ação.

Toda solicitação a um de nossos três pontos de extremidade especiais exigirá um cabeçalho de autorização que contenha um token de portador com o ID da sessão. Sem token de portador significa que a solicitação falhará. Um token de portador incorreto ou expirado significa que a solicitação falhará.

A validação trocará o ID da sessão por um ID do perfil a ser usado na próxima etapa da solicitação.

Começando de forma simples, digamos que queremos retornar as informações de perfil de um determinado usuário. Nosso endpoint pode ser parecido com o seguinte:

O pid é passado pelo middleware de validação e uma pesquisa é feita com o ID do perfil.

Até agora não foi tão difícil, certo?

Vamos dar um passo adiante e introduzir algumas consultas N1QL em nosso projeto. Digamos que queiramos obter todas as publicações de blog de um determinado usuário. Isso usará o nosso índice e as consultas do tipo SQL.

No código do ponto de extremidade acima, pegamos o pid do middleware de validação e adicioná-lo como um parâmetro para nossa consulta parametrizada.

Vamos iterar através do Resultados da consulta retornados da consulta e os adiciona a um []Blog variável. Se nenhum resultado for encontrado, podemos simplesmente retornar uma fatia vazia.

Fazer pesquisas diretas com base na chave sempre será mais rápido do que as consultas N1QL, mas as consultas N1QL são muito úteis quando você precisa consultar por informações de propriedade.

O ponto de chegada final não é diferente do que já vimos:

No código acima, aceitamos um corpo POST do cliente, bem como o pid do middleware de validação. Essas informações são então salvas no Couchbase.

Conclusão

Você acabou de ver como criar um armazenamento básico de perfil de usuário ou, neste caso, uma plataforma de blog, usando a linguagem de programação Go e Servidor Couchbase. Este é um tutorial alternativo para um tutorial anterior que eu havia escrito sobre o mesmo assunto, mas com o Node.js.

Deseja levar este tutorial para o próximo nível? Veja como criar um front-end de cliente da Web com Angular ou um front-end de cliente móvel com NativeScript.

Para obter mais informações sobre como usar o Couchbase com a Golang, consulte a seção Portal do desenvolvedor do Couchbase.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixar uma resposta