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

Como enviar username:password login x-auth-token

Olá, eu criei uma rotina no servidor que precisa receber um username:password para poder me devolver um x-auth-token. Como eu faço para mandar esse usuário e senha na hora de fazer o login?

Tentei de diversas maneiras e como abaixo também:

fetch('http://endereco-server.com.br/meu-metodo', {
      method: 'POST',
      headers: {
        'Accept': 'application/json',
        'Content-Type':'application/json'
      },
      body: {
        username: 'user@gmail.com.br', password: 'aisdfaasdfasfsd'
      }
    })
      .then(r => {
          const token = r.headers.get('x-auth-token');
          r.json().then(user => {
              if (token) {
                  this.setState({isAuthenticated: true, user, token});
                  console.warn('token: '+token);
              }
          });
      })
      .catch(error => console.warn(error));
2 respostas

Olá Cleber, tudo bem ?

Me parece que o problema está no body. O objeto no body é um típico objeto literal JS e não exatamente um JSON. A especificação define que um JSON deve seguir o exemplo:

{
    "key": "value"
}

Chaves e valores entre aspas

O que você pode fazer é usar a função JSON.stringify(), passando seu objeto literal com argumento, assim ela já te devolve um objeto equivalente seguindo o padrão. No mais, me parece ter nada errado com o código. Pra efeito de comparação durante o curso de React Native temos a mesma necessidade e fazemos com o seguinte código:

  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}));
  }

Espero ter ajudado. Abraço!

solução!

Olá Rafael, muito obrigado, mas no meu caso, eu precisava mandar o: 'Authorization' : 'Basic usuario:senha'