延迟模板呈现以进行身份验证检查 Angular
Delaying template rendering for authentication check in Angular
Angular 如果您有静态 URL 导致内容与身份验证方案结合使用,则
Angular 可能会导致严重的安全问题。如果未注册用户访问该页面,内容将在屏幕上闪烁片刻,然后再重定向到安全位置。我发现了这个问题,进行了广泛的搜索,并在 $routeConfig 中解决了 属性 的问题。不幸的是,无论我做什么,它都不起作用。代码如下:
$routeProvider.when('/dashboard/:id', {
templateUrl: 'js/partials/dashboard.html',
controller:'DashCtrl',
access: access.user,
resolve: {
login: function(authService) {
var promise = authService.isLoggedIn();
promise.then(function(data){
// We're in successfully
}).catch(function(err){
// ew, go away, redirect to login page
window.location = "login";
});
}
}
});
AuthService.isLoggedIn() 看起来像:
isLoggedin : function() {
return $http.get("users/session_check").then(function(result) {
if (result.data) {
if (user == undefined)
{
placeholderService.populatePlaceholders();
user = result.data;
}
return result.data;
} else {
return $q.reject("Please log in.");
}
});
}
无论如何,景色一闪而过。我在页面上有 ng-cloaks,什么都没有。我不知道还能做什么,但这已经变得非常令人气愤。
您传递给 $routeProvider 的函数应该 return 一个承诺。例如:
$routeProvider.when('/dashboard/:id', {
templateUrl: 'js/partials/dashboard.html',
controller:'DashCtrl',
access: access.user,
resolve: {
login: function(authService) {
var promise = authService.isLoggedIn();
return promise.then(function(data){
// We're in successfully
return data; // This gets injected as "login"
}).catch(function(err){
// ew, go away, redirect to login page
window.location = "login";
});
}
}
});
而且,如果我没记错的话,履行承诺的价值最终可以作为服务注入到控制器中(在这种情况下,login
服务就是您履行承诺的任何内容与).
Angular 如果您有静态 URL 导致内容与身份验证方案结合使用,则
Angular 可能会导致严重的安全问题。如果未注册用户访问该页面,内容将在屏幕上闪烁片刻,然后再重定向到安全位置。我发现了这个问题,进行了广泛的搜索,并在 $routeConfig 中解决了 属性 的问题。不幸的是,无论我做什么,它都不起作用。代码如下:
$routeProvider.when('/dashboard/:id', {
templateUrl: 'js/partials/dashboard.html',
controller:'DashCtrl',
access: access.user,
resolve: {
login: function(authService) {
var promise = authService.isLoggedIn();
promise.then(function(data){
// We're in successfully
}).catch(function(err){
// ew, go away, redirect to login page
window.location = "login";
});
}
}
});
AuthService.isLoggedIn() 看起来像:
isLoggedin : function() {
return $http.get("users/session_check").then(function(result) {
if (result.data) {
if (user == undefined)
{
placeholderService.populatePlaceholders();
user = result.data;
}
return result.data;
} else {
return $q.reject("Please log in.");
}
});
}
无论如何,景色一闪而过。我在页面上有 ng-cloaks,什么都没有。我不知道还能做什么,但这已经变得非常令人气愤。
您传递给 $routeProvider 的函数应该 return 一个承诺。例如:
$routeProvider.when('/dashboard/:id', {
templateUrl: 'js/partials/dashboard.html',
controller:'DashCtrl',
access: access.user,
resolve: {
login: function(authService) {
var promise = authService.isLoggedIn();
return promise.then(function(data){
// We're in successfully
return data; // This gets injected as "login"
}).catch(function(err){
// ew, go away, redirect to login page
window.location = "login";
});
}
}
});
而且,如果我没记错的话,履行承诺的价值最终可以作为服务注入到控制器中(在这种情况下,login
服务就是您履行承诺的任何内容与).