我正在尝试使用新功能,并且不完全了解AngularJS和Firebase如何互动。我创建的应用程序是使用Firebase和AngularFire在AngularJS中编写的。我目前正在IE中测试。
应用程序登录时没有问题,但当它闲置一段时间时,$ onAuthStateChanged()函数不再返回经过身份验证的用户,但$ requireSignIn()函数继续返回true。这意味着我可以浏览到需要身份验证的任何网页,但我实际上并没有经过身份验证的用户,因此我网站上的许多功能都被隐藏了(我使用ng-show来显示当有用户时控制。
当我打开调试时,我在auth.js的第12行出现此错误
Error: A network error (such as timeout, interrupted connection or unreachable host) has occurred.
这个错误是不变的,只要我点击“否”进行调试,我就会得到另一个错误。
这也在控制台中,但我不知道它是否相关:
XMLHttpRequest for https://securetoken.googleapis.com/v1/token?key=<removed key> required Cross Origin Resource Sharing (CORS).
XMLHttpRequest for https://securetoken.googleapis.com/v1/token?key=<removed key> required CORS preflight.
XMLHttpRequest: Network Error 0x80070005, Access is denied.
我已经尝试过使用console.log()来查看我制作它的程度,但是一旦问题开始发生,该网站似乎无法到达任何地方。同样,它一开始工作正常,直到它闲置一段时间。
我无法判断我是否在Google Chrome上遇到了同样的问题,到目前为止还没有发生。任何建议将不胜感激,如果看到我的任何代码会有所帮助,请告诉我。
答案 0 :(得分:0)
我想我找到了解决这个问题的方法。我迫使10分钟后超时并重定向到登录页面。我用ngIdle模块完成了这个,在这里找到:
https://github.com/HackedByChinese/ng-idle
这更像是一种解决方法,而不是一种解决方案,但这就是我最终要做的事情:
var adminConsoleApp = angular.module('adminConsoleApp', ['ngRoute', 'firebase', 'ngIdle']);
adminConsoleApp.config(['IdleProvider', 'KeepaliveProvider', function(IdleProvider, KeepaliveProvider) {
IdleProvider.idle(10*60); // 10 minutes idle
IdleProvider.timeout(30); // after 30 seconds idle, time the user out
KeepaliveProvider.interval(5*60); // 5 minute keep-alive ping
}]);
adminConsoleApp.run(['Idle', function(Idle) {
Idle.watch();
}]);
adminConsoleApp.run(['$rootScope', '$location', 'Authentication', function($rootScope, $location, Authentication) {
$rootScope.$on('IdleTimeout', function() {
Authentication.logout();
$location.path('/login');
});
}]);