Quando seu aplicativo da Web precisa "lembrar" os usuários, ele normalmente usa um dos dois mecanismos: cookies ou sessões. Um cookie é uma pequena área de armazenamento no navegador onde você pode manter dados relacionados ao usuário, como preferências de pesquisa, por exemplo. As sessões permitem que você armazene informações confidenciais no servidor.
Descubra como configurar sessões em um servidor Express desenvolvido por Node.js.
O que você precisará
Para seguir este tutorial, você precisa do Node.js e do npm instalados. Qualquer versão recente de Node.js deve vir com npm, um gerenciador de pacotes para instalação de dependências.
Você usará o npm para instalar o Express e o express-session. Estas são as ferramentas que você usará para criar o servidor web e a sessão.
O que é uma sessão no Node.js?
Um cookie é um pequeno arquivo que seu navegador usa para armazenar dados. Você pode usar cookies para armazenar dados não confidenciais, como preferências de pesquisa.
Você não deve armazenar dados confidenciais (como nomes de usuário e senhas) em cookies. Quando seu navegador envia cookies por HTTP, eles ficam vulneráveis a hackers que podem interceptá-los. Eles também são armazenados em texto simples em seu computador, para que os hackers possam inspecioná-los e roubar seus dados.
Em vez de salvar dados confidenciais como um cookie no cliente, você deve armazená-los no servidor. Isso o mantém protegido do mundo exterior.
As sessões permitem que você armazene dados confidenciais que seu aplicativo precisa para identificar o usuário. Exemplos são nome de usuário, senha e e-mail. Eles são mais seguros porque residem no servidor, não no cliente.
Sempre que você tiver dados que deseja persistir nas solicitações, salve-os no lado do servidor usando uma sessão. Você aprenderá como criar uma sessão na seção a seguir.
Criando uma sessão em um Express Server
Express é um framework web popular para Node.js. Ele permite que você configure um aplicativo de servidor da Web que atenda às solicitações do cliente no número de porta escolhido. Você pode criar rotas de API, aplicar middleware e até conectar o aplicativo a um banco de dados, tudo graças às APIs fornecidas pelo framework.
1. Criar um projeto Node.js
Crie uma pasta totalmente nova para o seu projeto e, em seguida, inicie sua ferramenta de linha de comando e CD nessa pasta.
Em seguida, execute o seguinte comando para inicializar um projeto Node.js:
npm init -y
Isso gera um arquivo package.json na pasta raiz do projeto com a configuração padrão. O arquivo package.json para execução scripts npm.
2. Instalar o Express e a sessão expressa
Você usará o Express para criar o aplicativo do servidor web. E express-session para criar sessões nesse aplicativo de servidor.
No terminal, execute o seguinte comando para instalar as duas dependências:
npm i express express-session
Depois de instalar os dois pacotes, o próximo passo seria criar o servidor.
3. Criar sessões no aplicativo
Crie um arquivo chamado App.js na pasta raiz do seu projeto e importe as dependências:
const expresso = exigir('expressar')
const sessão = exigir('sessão expressa')
aplicativo = expresso()
Em seguida, registre o middleware da sessão. Passe em um objeto com o segredo propriedade (para assinar o cookie sessionID) e o cookie.
app.use(
sessão({
segredo: "algum segredo",
biscoito: { idade máxima: 30000 },
salvar não inicializado: falso,
})
);
Aqui você define a maior idade da sessão para 30 segundos (30000 milissegundos). Definir saveUnitialized como false é essencial se você tiver um sistema de login. Se você não fizer isso, seu servidor irá gerar um novo ID de sessão toda vez que o usuário enviar uma solicitação.
Em seguida, crie uma rota de login para alterar a sessão. Quando um usuário acessa essa rota, você espera que o cliente envie o nome de usuário e a senha no corpo da solicitação. Primeiro, você acessa esses valores e verifica se eles existem (e se o usuário foi autenticado):
app.post("/Conecte-se", (req, res) => {
const { nome de usuário, senha } = req.body;
se (usuário senha) {
se (req.session.authenticated) {
res.json (sessão);
} outro {
se (senha "123") {
req.session.authenticated = verdadeiro;
req.session.user = { nome de usuário };
res.json (req.sessão);
} outro {
res.status(403).json({ msg: "Credenciais incorretas" });
}
}
} outro {
res.status(403).json({ msg: "Credenciais incorretas" });
}
});
Com a primeira instrução if, você executa uma verificação fictícia. Essa verificação é para garantir que você prossiga apenas se o nome de usuário e a senha estiverem presentes.
Em seguida, você verifica se o usuário já está autenticado. Em caso afirmativo, envie a sessão de volta ao cliente. Caso contrário, defina a propriedade autenticada como true e salve o nome de usuário na sessão. Em seguida, envie-o de volta ao cliente.
Com o código acima, o servidor lembrará de cada usuário que enviar uma solicitação ao servidor. Isso ocorre porque eles foram autenticados e tiveram seus dados exclusivos (nome de usuário e senha) salvos na sessão.
Inicie seu servidor adicionando o seguinte código na parte inferior do App.js:
app.listen(3000, () => {
console.registro("Servidor está rodando na porta 3000");
});
Para testar esta rota, use um cliente API para enviar uma solicitação para a rota de login que você criou. Certifique-se de enviar o nome de usuário e a senha no corpo da solicitação. Veja como sua solicitação de API ficaria se você usasse o Rest Client:
POST http://localhost: 3000/login HTTP/1.1
Tipo de conteúdo: "aplicativo/json"
{ nome de usuário: "Kingsley", senha: "123"}
Se tudo correr bem, você obterá o seguinte objeto:
{
"biscoito": {
"originalMaxAge": 30000,
"Somente http": verdadeiro,
"caminho": "/"
},
"autenticado": verdadeiro,
"do utilizador": {
"nome de usuário": "Kingsley",
"senha": "123"
}
}
Com este código, duas coisas aconteceram. Primeiro, você se autenticou no servidor. Em segundo lugar, a sessão agora tem seus detalhes de login, então o servidor agora sabe quem você é. Sempre que você enviar uma nova solicitação, ela se lembrará de você até que a sessão expire e o servidor a remova.
As sessões melhoram a experiência do usuário
As sessões são uma parte vital dos aplicativos Node.js. Isso ocorre porque eles permitem que você mantenha um estado de interação em muitas solicitações e respostas. As sessões são especialmente importantes para aplicativos que precisam que você faça login.
Use sessões em seu aplicativo de back-end para acompanhar os dados específicos do usuário. Um exemplo desses dados são os itens que seu usuário adicionou a um carrinho de compras.
Sem sessões, você teria que manter um armazenamento de dados separado para cada usuário em seu aplicativo. Isso seria ineficiente e aumentaria a complexidade do aplicativo.
Express.js simplifica sessões, roteamento e muito mais
Express.js é a estrutura da web Node.js mais popular atualmente em uso. Ele fornece muitas ferramentas e bibliotecas para criar aplicativos de back-end, e a biblioteca de sessão expressa é apenas uma delas.
Se você quiser usar o Node.js para desenvolvimento web de back-end, confira o Express.