我遇到了另一个问题,因为现在这不起作用了:
$rootScope.$on('$firebaseAuth:login', function(){
$location.path('/content');
因为在用户完成身份验证后,他们应该被重定向到/ content(而不是被卡在登录页面,登录按钮由于ng-hide而消失(见上文)),但是我尝试$ location并不重要。路径('/ content')不起作用。
我试过了:
waitForAuth.then(function(){
console.log('test');
$location.path('/content');
})
但是在用户通过身份验证之前,console.log会以控制台的方式打印出“test”,因此waitForAuth似乎无法正常工作:/。不知何故,waitForAuth会触发console.log,但它并没有触发$ location.path ...奇怪。
我甚至尝试过这样做(使用waitForAuth和$ rootScope。$ on:
waitForAuth.then(function(){
console.log('test');
$location.path('/content');
$scope.$apply();
})
但是我得到一个错误,即角度$ digest已经在进行中。
但是,如果我这样做:
app.controller('controller',['$scope','$firebaseAuth','$location','$rootScope',function($scope, $firebaseAuth,$location,$rootScope) {
$scope.$on('$locationChangeStart', function(event) {
event.preventDefault();
});
var ref = new Firebase('https://mybase.firebaseio.com/');
$scope.auth = $firebaseAuth(ref);
$rootScope.$on('$firebaseAuth:login', function(){
console.log("root scope");
$scope.$apply(function(){
console.log("scope");
$location.path('/content');
});
});
}]);
控制台两次注销“根范围”和“范围”并且时间是完美的:仅在用户完成身份验证后,但$ location.path()仍然无法正常工作且用户被卡在登录页面/视图中。
这也不起作用:
$rootScope.$on('$firebaseAuth:login', function(){
console.log("root scope");
$scope.$apply(function(){
console.log("scope");
$location.path('/content');
$location.replace();
});
我需要一些帮助:)
答案 0 :(得分:0)
我已从
中移除authRequired: true
解决了我的问题
$routeProvider.when('/content',{
authRequired: true, [removed]
templateUrl: 'content.html',
controller: 'MyController'
});
并像这样更改控制器:
app.controller('controller',['$scope','$firebaseAuth','$location','$rootScope',function($scope, $firebaseAuth,$location,$rootScope) {
$scope.$on('$locationChangeStart', function(event,next,current) {
if (next == 'http://angular.ngrok.com/angularfire/'){event.preventDefault();}
});
var ref = new Firebase('https://mybase.firebaseio.com/');
$scope.auth = $firebaseAuth(ref);
$rootScope.$on('$firebaseAuth:login',function(){
$location.path('/content');
});
}]);
的变化:
event.preventDefault();
必须具体,否则会阻止所有$location.path();
waitForAuth无法正常工作,因为它并不真正等待Auth,它会立即触发,因此我必须使用$rootScope.$on
我还在angularFire Github上打开了一个问题:
https://github.com/firebase/angularFire/issues/197
现在我必须找到另一种防止未经授权访问的方法:(