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

Falha ao tentar simular falha no login

Ao tentar simular a falha no login (Não foi possível efetuar o login), o React Native exibe a seguinte mensagem de erro:

Invalid response for blob:
get
XMLHttpRequest.js:259:16

Em pesquisa, notei que este é um problema que ocorre na versão 0.54. Todo retorno da API sem conteúdo acaba gerando essa falha (mais informações podem ser obtidas nessa issue do repositório oficial do React Native no GitHub).

Como a resposta da rota /api/public/login é um 401 sem conteúdo, este erro acaba ocorrendo. Tentei tratar essa falha de todas as maneiras mas não consegui chegar a uma solução.

Este não é um impedimento para seguir em frente com o curso. De todo modo, se alguém conseguiu solucionar o problema, compartilha ai!

Abraços.

2 respostas
solução!

Fala Gerson, blz ?

Testei por aqui e infelizmente o problema persiste. =/

As possíveis soluções, enquanto o pessoal do native não lança um novo release corrigindo, seriam:

  1. Alterar a implementação interna do native para a especificação js fetch (Um rapaz comenta na issue, sobre comentar o trecho que faz o throw new error). Na verdade só contorna o problema.

  2. (Mais recomendado) Fazer downgrade de versão do React Native no projeto, para que tudo volte a funcionar.

Testei por aqui com a versão 0.53.3 e tudo funciona normalmente.

Altere seu packages.json trocando o conteúdo de dependencies para:

...
"dependencies": {
    "react": "16.0.0",
    "react-native": "0.53.3"
  },

Salve o arquivo > Exclua a pasta node_modules do projeto > Rode o comando npm install para reconstruir as dependências da versão anterior (a que funciona) > Rode um novo react-native start pra dar um restart do React Packager > E rode de novo o react-native run-ios ou android.

Isso deve montar a app uma versão atrás (funciona perfeitamente), até que o pessoal do projeto corrija o problema.

Espero ter ajudado. Abraço!

Fala Rafael, Obrigado pelo rápido retorno!

Fiz o teste com o downgrade e rodou na boa. Valeu!

Estava dando uma pesquisada e encontrei biblioteca axios. Consegui integra-la ao projeto e continuei utilizando a versão 0.54 sem problemas.

Segue abaixo os passos para realizar a integração...

1. Pare o simulador/emulador e cancel o comando start do react-native.

2. Na raiz do projeto, execute os seguintes comandos:

npm install --save axios
npm install

3. Altere o método que executa o login no arquivo Login.js:

    axios({
      method: 'post',
      baseURL: 'https://instalura-api.herokuapp.com/api/',
      url: 'public/login',
      headers: {
        'Content-type': 'application/json'
      },
      data: {
        login: this.state.user,
        senha: this.state.password
      }
    })
    .then(response => {
      const token = response.data;
      AsyncStorage.multiSet([
        ['user', this.state.user],
        ['token', token]
      ]);

      this.props.navigator.resetTo({
        screen: 'Feed',
        title: 'Instalura'
      });
    })
    .catch(error => {
      this.setState({message: "Não foi possível realizar o login."})
    })

4. Volte a rodar o projeto:

react-native start
react-native run-ios

Não sei se a implementação esta 100%, mas é mais uma solução proposta...

Abraços.