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

Não consigo realizar o login

Oi pessoal,

já li todos os tópicos relacionados e tentei de tudo, mas não consigo realizar o login :(

Como não consegui rodar a api na minha máquina, estou usando pelo heroku.

Estou tentando logar com as seguintes infos:

usuário: alots senha: 123456

A única resposta que recebo é:

Failed to load http://instalura-api.herokuapp.com/api/public/login: Response for preflight is invalid (redirect)
import React, { Component } from 'react';

class Login extends Component{
    constructor(props){
        super(props);
        this.state ={
            msg: ''
        }
    }
    envia(event){
        event.preventDefault();

        const requestInfo ={
            method:'POST',
            body:JSON.stringify({login:this.login.value,senha:this.senha.value}),
            headers:new Headers({
                'Content-type' : 'application/json' 
            })
        };

        fetch('http://instalura-api.herokuapp.com/api/public/login', requestInfo)
        .then(response => {
            if(response.ok){
                return response.text();
            }else{
                this.setState({msg: 'Não foi possivel logar'})
            }
        })
        .then(token => {
            console.log(token);
        })

    }
    render(){
        return(
            <div className='login-box'>
                <h1 className="header-logo">
                    Instalura
                </h1>
                <span>{this.state.msg}</span>                            
                <form onSubmit={this.envia.bind(this)}>
                    <input type="text" ref={(input)=> this.login = input}/>
                    <input type="password" ref={(input) => this.senha = input}/>    
                    <input type="submit" value="Login" />
                </form>
            </div>
        );
    }
}

export default Login;
2 respostas
solução!

Oi Paula, tudo bem ?

Tenho uma app usando justamente a API do instalura no heroku. O código de login está da seguinte forma:

efetuaLogin() {
    const uri = 'https://instalura-api.herokuapp.com/api/public/login';
    const requestInfo = {
      method: 'POST',
      body: JSON.stringify({
        login: this.state.usuario,
        senha: this.state.senha
      }),
      headers: new Headers({
        'Content-type': 'application/json'
      })
    };

    fetch(uri, requestInfo)
      .then(response => {
        if (response.ok)
          return response.text();

        throw 'Não foi possível efetuar login';
      })
      .then(token => {
        AsyncStorage.setItem('token', token);
        AsyncStorage.setItem('usuario', this.state.usuario);
        this.redireciona();
      })
      .catch(erro => this.setState({mensagem: erro}));
  }

Pensei que tivesse rolando algum problema com a app em produção no heroku, mas está funcionando numa boa =/.

Dei uma pesquisada por aqui e vi que, pela especificação CORS, browsers fazem um request anterior ao seu (preflight request) pra ajustar a comunicação entre cliente e servidor (o servidor pode liberar a requisição seguinte, liberar sob alguma condição checada, negar o prosseguimento, etc). Acontece que a API do instalura está liberando o acesso a qualquer origem (nao está bloqueando), mas parece que o browser está negando o redirect pra sequencia da primeira requisição, não está seguindo em frente ao segundo request. Browser fazem isso de acordo com algumas estratégias especificadas.

Qual o browser você está utilizando? Você já tentou executar a partir de outro browser. Você já tentou usar https na uri que está sendo requisitada?

Dê uma olhada nessas possibilidades. Espero ter ajudado.

Abraço!

Ei Rafael,

Deu certo usando https <3

MUITO OBRIGADA pela resposta!