Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

React Native: Autenticação com Firebase: 07 Configurando o Firebase no projeto

Ao salvar para gravar o usuário teste@email.com gera a mensagem abaixo e não grava no firebase. Alguém mais teve esse problema?

undefined is not an object (evaluating 'auth.tenantId')
at node_modules\@firebase\auth\dist\rn\phone-eec7f987.js:null in _addTidIfNecessary
at node_modules\@firebase\auth\dist\rn\phone-eec7f987.js:null in tslib.__awaiter$argument_3
at node_modules\tslib\tslib.js:null in step
at node_modules\tslib\tslib.js:null in verb
at node_modules\tslib\tslib.js:null in __awaiter
at node_modules\promise\setimmediate\core.js:null in tryCallTwo
at node_modules\promise\setimmediate\core.js:null in doResolve
at node_modules\promise\setimmediate\core.js:null in Promise
at node_modules\tslib\tslib.js:null in fulfilled
at node_modules\@firebase\auth\dist\rn\phone-eec7f987.js:null in tslib.__generator$argument_1
at node_modules\tslib\tslib.js:null in step
at node_modules\tslib\tslib.js:null in verb
at node_modules\tslib\tslib.js:null in __awaiter
at node_modules\promise\setimmediate\core.js:null in tryCallTwo
at node_modules\promise\setimmediate\core.js:null in doResolve
at node_modules\promise\setimmediate\core.js:null in Promise
at node_modules\tslib\tslib.js:null in fulfilled
at node_modules\react-native\Libraries\Renderer\implementations\ReactNativeRenderer-dev.js:null in commitHookEffectListMount
at node_modules\react-native\Libraries\Renderer\implementations\ReactNativeRenderer-dev.js:null in commitPassiveMountOnFiber
at node_modules\react-native\Libraries\Renderer\implementations\ReactNativeRenderer-dev.js:null in commitPassiveMountEffects_complete
at node_modules\react-native\Libraries\Renderer\implementations\ReactNativeRenderer-dev.js:null in commitPassiveMountEffects_begin
at node_modules\react-native\Libraries\Renderer\implementations\ReactNativeRenderer-dev.js:null in commitPassiveMountEffects
at node_modules\react-native\Libraries\Renderer\implementations\ReactNativeRenderer-dev.js:null in flushPassiveEffectsImpl
at node_modules\react-native\Libraries\Renderer\implementations\ReactNativeRenderer-dev.js:null in flushPassiveEffects
at node_modules\react-native\Libraries\Renderer\implementations\ReactNativeRenderer-dev.js:null in scheduleCallback$1$argument_1
at node_modules\scheduler\cjs\scheduler.development.js:null in workLoop
at node_modules\scheduler\cjs\scheduler.development.js:null in flushWork
at node_modules\scheduler\cjs\scheduler.development.js:null in performWorkUntilDeadline
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:null in _allocateCallback$argument_0
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:null in _callTimer
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:null in _callReactNativeMicrotasksPass
at node_modules\react-native\Libraries\Core\Timers\JSTimers.js:null in callReactNativeMicrotasks
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:null in __callReactNativeMicrotasks
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:null in __guard$argument_0
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:null in __guard
at node_modules\react-native\Libraries\BatchedBridge\MessageQueue.js:null in flushedQueue
6 respostas

Olá, Dereck! Tudo bem?

O erro que você está vendo é relacionado ao tenantId do Firebase Authentication. O tenantId é um identificador opcional para organizar usuários e recursos em diferentes grupos dentro do mesmo projeto Firebase. Se você não configurou isso explicitamente, então ele deve estar como undefined por padrão.

Para corrigir esse problema, você pode simplesmente passar um valor null ou undefined para o tenantId ao chamar a função createUserWithEmailAndPassword ou signInWithEmailAndPassword, por exemplo:

firebase.auth().createUserWithEmailAndPassword(email, password, null)
  .then((userCredential) => {
    // ...
  })
  .catch((error) => {
    // ...
  });

Acredito que isso possa resolver seu problema! Precisando de ajuda é só falar, bons estudos!

O código que vc informou acima esta diferente do que você utilizou na sua aula, na sua aula esta da forma abaixo, poderia exemplificar a solução para o erro para o seu código da aula?

`createUserWithEmailAndPassword(auth, "test@email.com", "123456")
.then((dadosDoUsuario) => {
  console.log(dadosDoUsuario)
})
.catch((error) => {
  console.log(error)
});`

Ei Dereck, a ideia é a mesma, só tinha pego o exemplo da documentação. É estranho acontecer esse erro do tenantId, porque por padrão ele já é passado como undefined, então no caso a gente está reforçando que o valor dele vai ser null. No caso do código da aula, tenta seguir a mesma lógica:

createUserWithEmailAndPassword(auth, "test@email.com", "123456", null)
  .then((dadosDoUsuario) => {
    console.log(dadosDoUsuario)
  })
  .catch((error) => {
    console.log(error)
  });

Se o problema continuar vou precisar ter acesso ao repositório do seu projeto para dar uma olhada e ver o que pode estar causando esse erro.

Infelizmente deu o mesmo erro André, segue meu repositório para você dar uma olhada, espero que não seja um daqueles erros básicos de iniciantes rsrs https://github.com/DereckCamargo/AluraEsportes/

Retirei os dados de autenticação do Firebase.

solução!

Olá Dereck, me desculpa por só estar te respondendo agora. Olhei o seu código e o que está acontecendo foi um problema na hora que você importou a sua variável auth na tela de cadastro. A forma correta de importar o auth seria:

import { auth } from '../../config/firebase';

Sendo que foi importado assim:

import auth from "../../config/firebase";

Com essa mudança, você pode até remover aquele "null" que tinhamos colocado na função que vai funcionar. Então o seu código completo da tela de cadastro ficaria:

import React, { useEffect, useState } from 'react';
import { View } from 'react-native';
import Botao from '../../componentes/Botao';
import { EntradaTexto } from '../../componentes/EntradaTexto';
import estilos from './estilos';

// import auth from "../../config/firebase";
import { auth } from '../../config/firebase';
import { createUserWithEmailAndPassword } from "firebase/auth";

export default function Cadastro({ navigation }) {  
  const [email, setEmail] = useState('');
  const [senha, setSenha] = useState('');
  const [confirmaSenha, setConfirmaSenha] = useState('');

  useEffect(() => {
    createUserWithEmailAndPassword(auth, "test@email.com", "123456")
    .then((dadosDoUsuario) => {
      console.log(dadosDoUsuario)
    })
    .catch((error) => {
      console.log(error)
    });
  }, [])

  return (
    <View style={estilos.container}>
      <EntradaTexto 
        label="E-mail"
        value={email}
        onChangeText={texto => setEmail(texto)}
      />
      <EntradaTexto
        label="Senha"
        value={senha}
        onChangeText={texto => setSenha(texto)}
        secureTextEntry
      />

      <EntradaTexto
        label="Confirmar Senha"
        value={confirmaSenha}
        onChangeText={texto => setConfirmaSenha(texto)}
        secureTextEntry
      />

      <Botao onPress={() => {}}>CADASTRAR</Botao>
    </View>
  );
}

Espero que isso te ajude!

Muitoooo obrigado André.... deu certinho mesmo... erro básico he he... você foi muito atencioso e pontual. Seguindo no estudo aqui.