Mar*_*tin 6 angularjs angularjs-routing restangular
我偶然发现了Restangular来拨打休息服务.它运作良好,并返回一个承诺.我需要能够拥有调用块.原因是新页面重新加载我在技术上没有登录,但我可能有一个存储在cookie中的令牌.我想针对休息服务验证此令牌.问题是我需要阻止它.
如果发生超时或者它无效,我可以将用户视为未经过身份验证.
这是想要阻止的原因是我想使用$ location.path将它们重定向到新的URL而不是有效的令牌.
这不会发生在特定路由上,因此我无法使用阻塞的解析.它在技术上发生在每条路线上 - 我使用$ on.$ routeChangeStart并检查内部变量是否得到LoggedIn,如果没有登录,我检查存储的令牌.
这在每次页面刷新时发生,但在应用程序内导航时不会发生.
我想要获得的影响是Gmail的工作原理.
期待任何人对此有任何见解
谢谢
基本上,您需要确保在发生任何路由更改之前发生某些异步操作,并且在这种情况下,操作是对用户进行身份验证.
您可以做的是使用$routeChangeStart发出的事件,以便将属性添加到resolve路径上的对象,如下所示:
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
});
});
Run Code Online (Sandbox Code Playgroud)
由于angular将resolve在继续之前等待对象中的任何promise,因此您可以像示例中一样使用伪依赖.使用类似的东西,您应该能够保证您的用户在成功执行任何路由之前进行身份验证.
示例:http: //jsfiddle.net/hLddM/
| 归档时间: |
|
| 查看次数: |
3310 次 |
| 最近记录: |