получение данных JSON в сервис angularJS и сравнение для входа в систему

0

У меня есть настройка узла nodejs. Он извлекает данные из моей базы данных и превращает их в JSON, чтобы вытащить его с моего сервера NodeJS.

У меня есть эта услуга:

.service('LoginService', function ($q) {
   return {
      loginUser: function (name, pw) {
          var deferred = $q.defer();
          var promise = deferred.promise;

          if (name == 'user' && pw == 'secret') {
              deferred.resolve('Welcome ' + name + '!');
          } else {
              deferred.reject('Wrong credentials.');
          }
          promise.success = function (fn) {
              promise.then(fn);
              return promise;
          }
          promise.error = function (fn) {
              promise.then(null, fn);
              return promise;
          }
          return promise;
      }
   }
})

Теперь в этом я сравниваю вход пользователя для пароля и имени пользователя для user и secret. Теперь, когда у меня есть некоторые данные JSON на моем сервере, я хотел бы повторить это и сравнить его с name и pw в моем сервисе.

Поэтому я думаю, что это что-то вроде этого, но я думаю, что это синтаксическая ошибка

$http.get("http://***.***.**.***:****/login").success(function(data) {
   $scope.user = data
});
angular.forEach(data, function(username, key) {
   if(name == $scope.username && pw == $scope.password) { 
     //login code from above
   }
});

Мой синтаксис angularJS ушел, я все еще участвую. Я не уверен, что даже вслух использую $scope в сервисе.

Так что действительно я ищу, чтобы перебирать мои значения в JSON и сравнивать их со значениями, введенными пользователем.

Редактировать 1

Здесь я добавлю дополнительные сведения о проекте, которые помогут вам понять, что я делаю и почему.

У меня есть база данных Google облака SQL, которую я добавил в базу данных MySQL. В базе данных есть таблица пользователей, это содержит информацию, такую как имя, возраст, почтовый адрес, пароль и т.д. У меня есть 2 записи в этой таблице.

У меня также есть узел google nodeJS, который я использую для доступа к записям базы данных и возвращаю их как JSON с веб-адреса (http://: /load).

Вот почему мне нравится моя попытка входа в систему проверить массив JSON для имени пользователя и пароля. пароль - незашифрованный atm, но я просто хочу, чтобы мои основные функции там были сначала проверены, равны ли значения.

Я надеюсь, что это станет более понятным

Теги:
foreach
http

1 ответ

2

Я думаю, вы что-то неправильно поняли! Вы не можете иметь действительную регистрационную проверку в angularjs, каждый мог бы видеть правильные учетные данные в вашем клиентском коде, вы должны сделать некоторые основные проверки, такие как письмо, которое действительно достаточно для пароля и т.д. Вот пример базового потока входа.

AngularJS - Frontend (Любой мог видеть этот код, потому что он запущен в браузере клиента)

.controller('LoginCtrl', function($scope,$http) {
    $scope.login = function() {
        if ($scope.username && $scope.password && $scope.password.length > 5) {
            //more validations could be made here, or best in a directive!

            //this could be a service.
            $http.post('http://myserver.com/login', {
                username: $scope.username,
                password: $scope.password
            }).sucess(function(data){
                alert('logged!')
            }).error(function(err){
                alert('not logged::'+err)
            })
        }
    }
})

NodeJS - Backend (только вы можете увидеть этот код, потому что он запущен на вашем сервере)

app.post('login', function(req, res){
  var username = req.param('username');
  var password = req.param('password');
  if(username=='myusername' && password=='mypassword') {
    //again of course this is a demo
    //in real world you use a DB!
    return res.send('Logged!');
  }
  return res.status(403).send('Username and password not valid!');
});

Это очень простой пример, сделанный с угловыми выражениями

Редактировать 1 На основе редактирования вопроса

У вас есть база данных MySQL, поэтому вы должны запросить свои учетные данные и дать возможность MySQL проверить, существует ли пользователь с этими учетными данными. В любом случае, я не знаком с облачными сервисами google, но я уверен, что есть способ запускать запросы в вашей БД!

Если вы снова захотите придерживаться своего первоначального плана и получить всю БД в nodejs и пропустить его, я не рекомендую его, но вы можете сделать это так.

var request = require('request'); //npm install request

app.post('login', function(req, res) {
    var username = req.param('username');
    var password = req.param('password');

    request('http://www.dataFromMySQL.com', function(error, response, body) {
        if (!error && response.statusCode == 200) {

            var data = JSON.parse(body);
            var result = data.filter(function each(r) {
                return username == r.username && password == r.password;
            });
            if (result.length > 0) return res.send('logged')
            else return res.status(403).send('Username and password not valid!');
        }
        return res.status(403).send('Couldnt get db data.');
    })
});
  • 0
    неужели люди не видят каждый результат из цикла? но у вас есть точка зрения, эта логика здесь лучше. Но это не решает мою проблему полностью, вы просто переместили ее из углового положения в nodejs, мне все еще нужно пройтись по моему массиву JSON, чтобы сравнить данные для входа. Как мне сравнить введенные пароль и имя пользователя с данными JSON, которые я получаю из своего http: // <mynodejsip>: <port> / load. Спасибо за вклад между прочим :)
  • 0
    Я не могу понять, почему у вас есть массив JSON с данными для входа? как вы получаете эти данные? у вас нет базы данных? В любом случае, зацикливание в массиве просто, я не вижу проблемы ... пожалуйста, объясните больше, чтобы помочь вам решить эту проблему!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню