作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我偶然发现了 Restangular 调用休息服务。它工作得很好并返回一个 promise 。我需要能够拥有调用块。原因是在重新加载新页面时,我在技术上没有登录,但我可能将 token 存储在 cookie 中。我想针对休息服务验证此 token 。问题是我需要它来阻止。
如果发生超时或者如果它无效,我可以将用户视为未通过身份验证。
这是想要阻止的原因是我想使用 $location.path 将它们重定向到一个新的 URL,它不是一个有效的 token 。
这不会发生在特定路线上,因此我无法使用阻塞的解析。从技术上讲,它发生在每条路线上 - 我使用 $on.$routeChangeStart 并检查内部变量是否已登录,如果未登录,我会检查存储的 token 。
这会在每次页面刷新时发生,但不会在应用程序内部导航时发生。
我试图获得的影响是 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
});
});
resolve
中的任何 promise 在继续之前要完成的对象,您可以像示例中那样使用伪依赖项。使用类似的东西,您应该能够保证您的用户在任何路由成功执行之前进行身份验证。
关于AngularJS (Restangular) : Making a promise block? 需要使用它来验证 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18105046/
我是一名优秀的程序员,十分优秀!