Definindo a Entidade Usuário

A melhor maneira de entender o mongoose é usando ele. Então vamos criar uma entidade usuário e definir alguns campos. Crie o arquivo domain/user.js e defina sua entidade dessa maneira.

// importando os packages que precisamos
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const bcrypt = require('bcryptjs')

// schema
const UserSchema = new Schema({
  name: String,
  username: {
    type: String,
    required: true,
    index: {
      unique: true
    }
  },
  password: {
    type: String,
    required: true,
    select: false
  }
})

// gerar o hash do password antes de salvar
UserSchema.pre('save', function (next) {
  const user = this

  // gerar o hash apenas se o password mudou o para um novo usuário
  if (!user.isModified('password')) { return next() }

  // gerando o hash
  const hash = bcrypt.hashSync(user.password)

  // trocando o password pelo hash
  user.password = hash
  next()
})

// method to compare a given password with the database hash
UserSchema.methods.comparePassword = function (password) {
  const user = this
  return bcrypt.compareSync(password, user.password)
}

// exportando a entidade
module.exports = mongoose.model('User', UserSchema)

Então, parece que tem bastante coisa acontecendo aqui, mas é tudo bem simples. Estamo apenas criando um Schema para a entidade usuário. Definimos os campos name | username | password como String. Dessemos para o mongoose criar um índice único configurando os atributos index e unique para username. Isso significa que não podemos ter nomes de usuário duplicados. Outra feature que usamos, é a select: false no password. Uma query em usuários não vai retornar esse campo, a não ser que ele seja explicitamente solicitado.

Também criamos uma função usando pre para garantir que a senha seja convertida em hash antes de ser salva.

É sempre importante ter a certeza de que não estamos salvando senhas como text no banco. Temos que garantir que nossa aplicação é segura desde o início.

Com o mongoose, também podemos criar um método para comparar a senha com o hash e autenticarmos o usuário no futuro.

Com nossa entidade criada, vamos importa-la em nosso index.js, dessa maneira, para usarmos em nossa aplicação.

const User = require('./domain/user')

Agora nossa aplicação está pronta e conectada para construirmos nossas rotas. Essas rotas definirão nossa API e são a principal razão desse capítulo existir... Então, vamos lá!

results matching ""

    No results matching ""