Angularfire ngRoute /解决问题,跳转到其他方式

时间:2016-03-19 18:20:09

标签: javascript angularjs firebase angular-routing ngroute

我使用最新的Angular + Firebase并尝试设置登录授权系统。我有home.html,其中包含登录+注册链接,转到login.html并添加凭据工作正常(在提交时记录正确的UID)但它应该路由到dash.html但返回home.html

我已经发现它似乎与我的解析功能有关,因为当我删除时,问题就会消失。但我仍然想要(需要?)我认为。

如果我已登录(但已重定向到home.html),我仍然可以通过网址访问dash.html,如果我使用dash.html的注销功能,那么我无法再次访问它。应该如何。 但我无法弄清楚为什么我会首先重定向到home.html。

这里有一些代码,任何帮助表示赞赏:

我的.run,.config和路线。

app.run(['$rootScope', '$location',
  function($rootScope, $location){
    $rootScope.$on('$routeChangeError',
    function(event, next, previous, error){
     if(error === 'AUTH_REQUIRED'){
     $location.path('/home');
   }
 });
 }]);

 app.config(['$routeProvider', '$locationProvider', function($routeProvider,       
 $locationProvider){
 $routeProvider

.when('/home', {
    templateUrl: '/home.html',
    controller: 'homeController'
})

.when('/login', {
    templateUrl: '/login.html',
    controller: 'loginController',
    resolve: {
      'currentAuth': ['Auth', function(Auth){
       return Auth.$waitForAuth();
  }]
  }
 })

.when('/dash', {
    templateUrl: '/dash.html',
    controller: 'dashController',
    resolve: {
      'currentAuth': ['Auth', function(Auth){
       return Auth.$requireAuth();
  }]
  }
 })

.otherwise({ redirectTo: '/home' });
}]);

我的登录控制器:

app.controller('loginController', ['currentAuth', '$scope', '$firebaseAuth',    
'Auth', '$location', '$rootScope',
function(currentAuth, $scope, $firebaseAuth, Auth, $location, $rootScope){
var ref = new Firebase('https://url.firebaseio.com');
$scope.auth = $firebaseAuth(ref);

$scope.loginUser = function(){
  $scope.auth = Auth;
  $scope.auth.$authWithPassword({
    email:$scope.email,
    password:$scope.password
  }, {
    remember: 'sessionOnly'
  }).then(function(authData) {
    console.log('Logged in as: ', authData.uid);
    $scope.auth.$onAuth(function(authData) {
    $rootScope.auth = true;
    $scope.auth = Auth;
    $location.path('/dash.html');
  })

  }).catch(function(error) {
    console.log('There was an error: ', error);
  });
 };
}]);

我的工厂和模块:     var app = angular.module(' app',[' firebase',' ngRoute']);

app.factory('Auth', ['$firebaseAuth',
  function($firebaseAuth){
  var ref = new Firebase('https://url.firebaseio.com');
return $firebaseAuth(ref);
}]);

1 个答案:

答案 0 :(得分:0)

它有你的决心问题。

如果查看文档firebase doc 你会看到他们使用

$waitForSignIn

$requireSignIn

功能。我知道因为我做了同样的事情。尝试相反,它应该工作