如何在app.js中检查angularfire身份验证状态

时间:2016-08-08 14:25:58

标签: javascript angularjs firebase angularfire

我正在按照angularfire教程对用户进行身份验证。 用户可以在应用程序中注册,登录甚至注销。

当我尝试使用一个解决方案来检查某些路由(ui-route)的$ requireSignIn()时,它不起作用。

另外,我想检查加载模块的app.js中的用户身份验证状态($ onAuthStateChanged())。然后,如果身份验证发生更改,请更新身份验证服务(userAuth)。我正在使用ng-show =" authData" / ng-hide =" authData更改登录元素的html。但有时甚至在登录后,其中一些元素仍然显示为未登录。我认为这与身份验证更新状态有关。

如果用户已登录,则尝试访问登录/注册页面会将其发送回主页。

这是我的app.js

angular
  .module('myApp', [
    'ngAnimate',
    'ngAria',
    'ngCookies',
    'ngResource',
    'ui.router',
    'ngMeta',
    'firebase'
  ])

   .run(["$rootScope", "$state", function($rootScope, $state) {
    $rootScope.$on("$stateChangeError", function(event, toState, toParams, fromState, fromParams, error) {
      if (error === "AUTH_REQUIRED") {

        $state.go("home");
      }

    });
    }])

  .config(['$stateProvider', '$urlRouterProvider', '$locationProvider',
   function( $stateProvider, $urlRouterProvider, $locationProvider, ngMetaProvider, $location, userAuth) {


    $urlRouterProvider.otherwise('/');


    $stateProvider
        .state('/', {
            url: '/',
            templateUrl: 'views/main.html',
            controller: 'MainCtrl',
            meta: {
              'title': 'Goaf | Your next great destination',
              'description': 'This is the description shown in Google search results'
            }
        })
      .state('home', {
        url: '/home',
        templateUrl: 'views/home.html',
        controller: 'HomeCtrl',
        meta: {
          'title': 'Goaf | Your next great destination',
          'description': 'This is the description shown in Google search results'
        },
        resolve: {

        "currentAuth": ["userAuth", function(userAuth) {
          return userAuth.$requireSignIn();
        }]
      }

    })


  }]);

这是主页的控制器,我只想登录用户:

angular.module('myApp')
  .controller('HomeCtrl', ["currentAuth", function ($rootScope, $scope, $http, $interval, $location, userAuth, dataservice, currentAuth) {

    $scope.authData = userAuth.isLoggedIn();

  }]);

这是我的userAuth服务文件:

angular.module('myApp')
  .service('userAuth', ["$firebaseAuth", function($firebaseAuth) {
    var firebaseAuthObject  = $firebaseAuth();

    this.login = function(loginEmail, loginPassword){

       return firebaseAuthObject.$signInWithEmailAndPassword(loginEmail, loginPassword);
    };

    this.isLoggedIn = function(){
         return firebaseAuthObject.$getAuth();
    };

    this.signOutUser = function() {
      firebaseAuthObject.$signOut();

      console.log('logging out user!');
    };

  }
 ]);

0 个答案:

没有答案