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

Ajuda com requisição via post.

Estou tentando mandar um login e senha para autenticar no meu servidor REST. http://re98.com.br/unici_restserver/api/login/

Qualquer dado que eu digite ele passa para a tela de listagem Segue: arquivos

controller.js

angular.module('starter')
.controller('LoginController', function($scope, PessoaService, $ionicPopup, $state){
  $scope.data = {};


$scope.realizarLogin = function(){
  var dadosDoLogin  = {
    params : {
      "login": $scope.data.login ,
      "senha": $scope.data.senha
    }

  }

PessoaService.realizarLogin(dadosDoLogin).then(function(dados){
  $state.go('lista');
}, function(erro){
  $ionicPopup.alert({
    title: "Erro",
    template: "Login ou senha incorretos"
  })
});
}

});

angular.module('starter')
.controller('ListagemController', function($scope, PessoaService){

  PessoaService.obterPessoas().then(function(dados){
    $scope.listaDeNomes = dados;
  });

});

service.js

angular.module('starter')
.service('PessoaService', function($http){

    var url = 'http://re98.com.br/unici_restserver/api/pessoas/';
    var urlLogin = 'http://re98.com.br/unici_restserver/api/login/';
    return{
        obterPessoas: function(){
            return $http.get(url).then( function(response){
                return response.data;
            });

        },

        realizarLogin : function(dadosDoLogin){

          var headers = {
   'Content-Type': 'application/x-www-form-urlencoded'
};

return $http.post(urlLogin, dadosDoLogin, headers).then(function(response) {
    response.data;
}, function(error) {
    response.error;
});


        }
    }
});

A minha API quando envio os dados corretamente ela retorna

{
    "0": {
        "login": "isaac",
        "senha": "123456"
    },
    "status": true,
    "message": "Login efetuado com sucesso."
}

E quando o usuário ou senha está incorreto

{
    "message": "Ocorreu um erro tente novamente."
}

Alguem pode me dar uma ajuda?

3 respostas

Oi Isaac, se eu entendi corretamente o seu problema é que o usuário sempre é direcionado para a listagem, independente do login dar certo ou não. É isso mesmo?

Nesse caso, olhando o seu código eu vi que tem esse trecho:

PessoaService.realizarLogin(dadosDoLogin).then(function(dados){
  $state.go('lista');
}, function(erro){
  $ionicPopup.alert({
    title: "Erro",
    template: "Login ou senha incorretos"
  })
});

Mas na function realizarLogin, dentro do Service, você não está retornando os dados.

Tente alterar sua function para:

realizarLogin : function(dadosDoLogin) {
  var headers = {
    'Content-Type': 'application/x-www-form-urlencoded'
  };

  return $http.post(urlLogin, dadosDoLogin, headers);
}

Pois assim você devolve a promisse para o controller e lá será feito o $state.go('lista'); caso dê certo, ou mostrará a popup do ionic caso dê erro.

Outra coisa, verifique se por acaso sua API está retornando código 200 no caso de login inválido. Se isso acontecer, a function de erro não será chamada.

Abs.

Olá.

Vamos por parte.

O seu post está retornando oq?

Se estiver retornando com sucesso, vc tem que ver o redirecionamento que está errado.

solução!

Resolvido, além da sugestão do Rodrigo, o meu Servidor REST estava me retornando um status 200 mesmo se a senha estivesse errada, corrigido o erro no servidor também e deu tudo certo.