AngularJS(Restangular):做出承诺块?需要使用它来验证令牌
我偶然发现Restanglar打电话给一家休息服务公司。它工作得很好,并且回报了一个承诺。我需要有呼叫阻塞功能。原因是在一个新的页面重新加载,我技术上没有登录,但我可能有一个令牌存储在cookie中。我想根据rest服务验证此令牌。问题是我需要它来阻止 如果超时发生或无效,我可以将该用户视为未经身份验证 这就是想要阻止的原因,因为我想使用$location.path将它们重定向到一个新的URL,因为它不是有效的令牌 这不会发生在特定的路线上,所以我不能使用正在阻塞的resolve。从技术上讲,它发生在每个路由上-我使用$on.$routeChangeStart并检查内部变量Get LoggedIn与否,如果未登录,我检查存储的令牌 这会在每次页面刷新时发生,但不会在应用程序内部导航时发生 我试图得到的影响是Gmail的工作方式 期待任何人对此有任何见解AngularJS(Restangular):做出承诺块?需要使用它来验证令牌,angularjs,angularjs-routing,restangular,Angularjs,Angularjs Routing,Restangular,我偶然发现Restanglar打电话给一家休息服务公司。它工作得很好,并且回报了一个承诺。我需要有呼叫阻塞功能。原因是在一个新的页面重新加载,我技术上没有登录,但我可能有一个令牌存储在cookie中。我想根据rest服务验证此令牌。问题是我需要它来阻止 如果超时发生或无效,我可以将该用户视为未经身份验证 这就是想要阻止的原因,因为我想使用$location.path将它们重定向到一个新的URL,因为它不是有效的令牌 这不会发生在特定的路线上,所以我不能使用正在阻塞的resolve。从技术上讲,它
谢谢我认为最好的方法可能是使用$location.path推送用户,您可以使用.then()将用户留在加载页面上,从而有效地强制等待
var currentPath = $location.path();
$location.path(loadingScreen);
//Assuming you have some sort of login function for ease.
Restangular.login(token).then(
function(result) {
$location.path(currentPath)
},
function(error) {
$location.path(logInScreen)
}
);
如果您使用的是ui路由器,您可以移动到具有相同URL的另一个状态,在该状态下,您将使用Restangular.login,然后,如果成功,则返回“登录”状态,否则,转到“登录”状态,用户必须输入其用户名和密码 如果您不使用ui路由器,您可以通过一些
ng交换机
实现类似的功能
因此,在到达屏幕时,您可以执行Restangular.login
,默认情况下,您可以通过将一些布尔值设置为true来显示加载页面。然后,如果不成功,您将他发送到登录,否则,您将加载设置为false并显示页面
无论如何,我强烈建议使用ui路由器,它会震动:)
希望这能奏效 基本上,您需要确保在发生任何路由更改之前发生一些异步操作,在这种情况下,该操作是对用户进行身份验证 您可以使用发出的
$routeChangeStart
事件向路由上的解析
对象添加属性,如下所示:
function authenticate() {
if ( user.isAuthenticated ) {
return;
}
// Just fake it, but in a real app this might be an ajax call or something
return $timeout(function() {
user.isAuthenticated = true;
}, 3000);
}
$rootScope.$on( "$routeChangeStart", function( e, next ) {
console.log( "$routeChangeStart" );
next.resolve = angular.extend( next.resolve || {}, {
__authenticating__: authenticate
});
});
由于angular将在继续之前等待resolve
对象中的任何承诺得到满足,因此您可以像示例中那样使用伪依赖项。使用类似的方法,您应该能够保证在任何路由成功执行之前,您的用户正在进行身份验证
示例:谢谢Matt,这听起来像是我需要的,但是$location.path(加载屏幕)会改变浏览器的地址栏。不管怎样,围绕着这个?很好!,这就是我要找的。