Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Mobile Development
Code

Regras de Segurança do Firebase

by
Length:ShortLanguages:

Portuguese (Português) translation by Erick Patrick (you can also view the original English article)

Regras de segurança da Firebase é o que usamos para proteger nossos dados de usuários não autenticados bem como a estrutura dos dados.

Nesse rápido tutorial, explicaremos como configurar as regras de segurança da nossa base de dados apropriadamente, para que apenas usuário autententicados tenham acesso a ela. Também mostraremos como estruturar dados para facilitar o processo.

O Problema

Assumamos que temos dados JSON em na Firebase, como no exemplo abaixo:

Olhando a base de dados, podemos ver que há alguns problemas nos dados:

  1. Dois usuários (user1 e user3) tem os mesmo telefones Gostaríamos que fossem únicos.
  2. user3 tem um número no último nome.
  3. user2 apenas tem sete dígitos no telefone, ao invés de 11
  4. O valor da idade de user1 e user2 é uma cadeia de caracteres enquanto de user3 é um número

Com todos esses problemas destacados nos dados, perdemos integridade nos dados. No passos abaixo, mostraremos como prevení-los.

Regras Permissívas

A Firebase tem os seguintes tipos de regra:

Tipo Função
.read Descreve se e quando dados são permitidos a leitura por usuários
.write Descreve se e quando é permitido escrever dados.
.validate Define como um valor formatado corretamente parece, se tem atributos filhos e o tipo de dados.
.indexOn Especific um filho para indexar para suportar ordenação e consulta.

Leiamos mais sobre eles na documentação da Firebase.

Eis uma regra permissiva para a chave users na base de dados.

Isso é ruim porque permite qualquer ler e escrever na base de dados. Qualquer um pode acessar /users/ e seus caminhos internos. Não só isso, mas nenhuma estrutura é impsota nos dados do usuário.

Regras de Controle de Acesso

Com essas regras, controlamos acesso aos registros do usuários a usuários com acesso. Não apenas isso, apenas os donos dos dados podem lê-los e reescrevê-los. Fazemos isso com o $uid. Essa variável representa a chave filha (nomes de variáveis iniciam com $). Por exemplo, acessando /users/user1, $uid será user1.

Depois, usamos a variável auth, que representa o usuário autenticado no momento. Essa é uma variável pré-definida pela Firebase. Nas linhas 5 e 6, forçamos uma limitação de acesso que apenas usuários autneticados com o mesmo id que o usuário do registro pode ler ou esrever seus dados. Em outras palavras, para cada usuário, leitura e acesso é garantido para /users/<uid>, onde <uid> representa uid do usuário autenticado no momento.

Outras variáveis do servidor Firebase são:

now Tempo atual em milisegundos da época do Linux
root Um RuleDataSnapshot representando o caminho raiz na Firebase como existente antes de tentar a operação.
newData Um RuleDataSnapshot representando o dado como se existisse após a operação. Incluir o novo dado sendo escrito e o dado existente.
data Um RuleDataSnapshot representando o dado como existia antes da operação.
auth O corpo do token de um usuário autenticado.

Leiamos mais sobre essas e outras variáveis de servidor na documentação da Firebase.

Aplicando Estrutura de Dados

Também podemos usar regras da Firebase para forçar limitações de dados na base de dados.

Pro exemplo, nas regras abaixo, nas linhas 8 e 11, criamos regras que qualquer valor novo para o primeiro e último nome devem ser cadeias de caracteres. Na linha 14, forçamos idade a ser um número. Por fim,  nas 17 e 18, forçamos que o telefone seja uma cadeia de caracteres de tamanho 11.

Mas como prevenimos números de telefone duplicados?

Prevenindo Duplicados

Agora, mostraremos como previnir telefones duplicados.

Passo 1: Normalizando Estruturas de Dados

A primeira coisa a fazer é modificar o caminho raiz de inclusão do nodo /phoneNumbers/. Assim, ao criarmos um novo usuário, também adicionaremos o telefone do usuário ao seu nodo se a validação for bem sucedida. Nossa estrutura de dados parecerá com isso:

Passo 2: Aplicando Nova Estrutura de Dados

Precisamos modificar as regras de segurança para forçar a estrutura:

Aqui, garantimos que o telefone é único verificando se já é filho do nodo /phoneNumbers/ usando o número como chave. Em outras palavras, veerificarmos se o telefone já foi registrado para um usuário. Se não tiver sido, a validação passa e a operação de escrita é aceita—caso contrário, será rejeitada.

Nosso app precisará adicionar o telefone ao criar um novo usuário e precisará remover o número se o usuário for removido.

Simulando Validação e Regras de Segurança

Podemos imular as regras de segurança no console da Firebase, clicando no botão Simulator. Adicionemos nossas regras, selecionemos o tipo de simulação (leitura ou escrita), alguns dados e caminhos e apertemos Run:

Firebase Simulator

Se o valor do primeiro nome for um número ao invés de uma cadeia de caracteres, a validação falhará e a escrita negada:

Write Access Denied

Conclusão

Nesse rápido tutorial, aprendemos regras de segurnaça da Firebase: como prevenir acesso não autorizado a dados e como garantir que os dados estejam estruturados na base.

Para aprender mais sobre as regras da Firebase, vejamos a documentação oficial. E vejamos alguns outros tutoriais e cursos sobre Firebase na Envato Tuts+!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.