无法使用带有Firebase登录名的$ location.path重定向到新页面

时间:2016-10-18 07:52:20

标签: angularjs firebase firebase-authentication

问题:在Firebase登录时,我想将用户重定向到新页面。我正在尝试在我的控制器中使用$ location.path(),即使我尝试使用$ state.go ()。但似乎没有用。此外,我在控制台中没有收到任何错误。

使用Firebase signInWithEmailAndPassword方法,Angularjs 1.5,ui-router和AngularFire。

login.service.js

var firebaseAuthObject = fbDbConn.auth();
function login(emailid, passwd) {
  return firebaseAuthObject.signInWithEmailAndPassword(emailid, passwd);    
}

login.controller.js

(function() {
  'use strict';

  angular
    .controller('AuthController', AuthController);

  AuthController.$inject = ['$scope', '$location', 'authService'];

  function AuthController($scope, $location, authService) {
    $scope.message = null;
    $scope.error = null;

    $scope.register = function() {
        return authService.register($scope.email, $scope.password)
        .then(function(userData) {
            $scope.message = "User created with uid: " + userData.uid;
        }).catch(function(error) {
            $scope.error = error;console.log(error);
        });
    };

    $scope.login = function() { 
        $scope.auth_error ="";
        return authService.login($scope.email, $scope.password)
        .then(function(authData) {
            $location.path('/app/overview');    //$state.go('/app/overview');
        }).catch(function(error) {console.log(error);
            $scope.error = error;
            $scope.auth_error = "Username or Password is wrong.";
        });
    };

    $scope.logout = function() {console.clear();
        authService.logout();
        $location.path('/login');
    };

  }

})();

config.route.js

(function() {
  'use strict';

  angular
    .module('singApp.login', ['ui.router','firebase'])
    .config(configFunction)
    .run(runFunction);

  configFunction.$inject = ['$stateProvider'];

  function configFunction($stateProvider) {    
    $stateProvider
      .state('login', {
        url: '/login',
        templateUrl: 'app/modules/login/login.html'
      })
  }

  runFunction.$inject = ['$location', 'authService', 'firebaseDataService', 'PROTECTED_PATHS'];

  function runFunction($location, authService, firebaseDataService, PROTECTED_PATHS) {

    authService.firebaseAuthObject.onAuthStateChanged(function(authData) {
      if (!authData && pathIsProtected($location.path())) {
        authService.logout();
        $location.path('/login');
      };
    });

    function pathIsProtected(path) {
      return PROTECTED_PATHS.indexOf(path) !== -1;
    }
  }

})();

感谢您的帮助!!

2 个答案:

答案 0 :(得分:0)

只需检查$ state.go()方法而不是$ location

首先注入依赖关系' $ state'

AuthController.$inject = ['$scope', '$state', 'authService'];

检查 routes.js 文件。

以下是示例代码。

 app.config(function($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.otherwise("/profile");
    $stateProvider
        .state('login', {
            url: '/',
            templateUrl: 'login.html'
        })
        .state('app.overview', {
            url: '/overview',
            templateUrl: 'views/overview.html'
        })
});

如果一切正确,那么您可以使用以下代码进行重定向。

  

$ state.go('登录&#39);

我正在使用' $ stateChangeSuccess'找出路线变化的事件。

app.run(['$rootScope', '$state', '$stateParams', '$cookies', '$timeout',
    function($rootScope, $state, $stateParams, $cookies, $timeout) {
          $rootScope.$state = $state;
          $rootScope.$stateParams = $stateParams;


          $rootScope.$on('$stateChangeSuccess', function(event, nextRoute, toState) {
              console.log(nextRoute.name);
              // $state.go('login');
          });
     }
])

答案 1 :(得分:0)

首先你应该向你的控制器注入$ state并使用$ state.go(' stateName')

$ state.go(' / app / overview')将无效

你应该使用$ state.go(' stateName')

angular
    .controller('AuthController', AuthController);

  AuthController.$inject = ['$scope', '$location','$state', 'authService'];

  function AuthController($scope, $location, $state,authService) {
    $scope.message = null;
    $scope.error = null;

    $scope.register = function() {
        return authService.register($scope.email, $scope.password)
        .then(function(userData) {
            $scope.message = "User created with uid: " + userData.uid;
        }).catch(function(error) {
            $scope.error = error;console.log(error);
        });
    };

    $scope.login = function() { 
        $scope.auth_error ="";
        return authService.login($scope.email, $scope.password)
        .then(function(authData) {
           $state.go('stateName');
        }).catch(function(error) {console.log(error);
            $scope.error = error;
            $scope.auth_error = "Username or Password is wrong.";
        });
    };

    $scope.logout = function() {console.clear();
        authService.logout();
        $location.path('/login');
    };

  }

})();