2014-12-09 5 views
4

Я использую Angular (1.3.5) и Firebase, чтобы написать программу для блога игрушек, и в настоящее время я борюсь с частью входа пользователя.firebaseAuth with Angular: User Login

я впервые создал угловой модуль:

var blogApp = angular.module('blogApp', ['ngRoute', 'firebase', 'RegistrationController']); 

Тогда на вершине blogApp, я создал контроллер под названием ** RegistrationController **:

blogApp.controller('RegistrationController', function ($scope, $firebaseAuth, $location) { 

     var ref = new Firebase('https://myAppName.firebaseio.com'); 
     // var authLogin = $firebaseAuth(ref); 


     $scope.login = function(){ 

      ref.authWithPassword({ 
       email: $scope.user.email, 
       password: $scope.user.password 
      }, function(err, authData) { 
       if (err) { 
        $scope.message = 'login error'; 
       } else { 
        $scope.message = 'login sucessful!'; 
       } 
      }); 
     }; // login 

    }); //RegistrationController 

Я приложил метод login() к ng- отправьте в мою форму для входа в систему в пределах RegistratinController.

Когда я нажимаю, чтобы отправить форму для входа, форма не дает ответа, без каких-либо ошибок.

Форма входа в систему работает только при двойном нажатии кнопки «Отправить» - почему это так? confusing

+0

Вам удалось решить эту проблему? У меня такая же проблема. Ответ, предоставленный ниже, не работает ни для меня, ни для – solefald

+0

. Сообщите мне, если мой ответ будет работать для вас. Если это так, отметьте его как принято. Хорошо держать оставшуюся без ответа очередь. –

ответ

4

Вы используете библиотеку JavaScript Firebase, а не AngularFire для методов входа.

Вам необходимо передать ссылку Firebase в ссылку $firebaseAuth.

var auth = $firebaseAuth(ref); 

Оттуда вы можете позвонить по телефону auth.$authWithPassword.

$scope.login = function(){ 

     auth.$authWithPassword({ 
      email: $scope.user.email, 
      password: $scope.user.password 
     }, function(err, authData) { 
      if (err) { 
       $scope.message = 'login error'; 
      } else { 
       $scope.message = 'login successful!'; 
      } 
     }); 
    }; // login 

AngularFire является Угловой привязкой для библиотеки Firebase, который обрабатывает автоматическую синхронизацию над объектами и массивами. AngularFire также обрабатывает, когда нужно позвонить $scope.apply, чтобы правильно обновить представление.

В вашем случае код входа в систему работает первым кликом, но он не применяется к странице. Вы можете обернуть этот код в $timeout, но было бы лучше использовать службу $firebaseAuth.

+0

это не работает, спасибо в любом случае – TonyGW

+0

Какие ошибки вы получаете? Можете ли вы воспроизвести это в Plunker? Из кода, который вы мне дали, ответ верен. –

+1

@TonyGW Ответ Дэвида здесь правильный. Вам нужно указать «Угловое», что данные были обновлены и инициировать компиляцию. Обновите свой вопрос с помощью нового кода, если у вас все еще есть проблемы или вы принимаете его ответ для других, испытывающих подобные проблемы. – Kato

1

Благодаря пользовательским jacobawenger, для решения он разместил здесь:

Can't get new password authentication methods to work in AngularFire 0.9.0?

Это работает, как ожидалось:

myApp.controller('RegistrationController', 
    function($scope, $firebaseAuth, $location) { 

    var ref = new Firebase('https://myApp.firebaseio.com'); 
    var simpleLogin = $firebaseAuth(ref); 

    $scope.login = function() { 
     simpleLogin.$authWithPassword({ 
      email: $scope.user.email, 
      password: $scope.user.password 
     }).then(function() { 
      $location.path('/mypage'); 
     }, function(err) { 
      $scope.message = err.toString(); 
     }); 
    } // login 

}); // RegistrationController