SessionStorageキー/値の存在を単純にチェックするルート変更に関する基本的な認証チェックがあります。ただし、認証されていないユーザーが、コントローラーに AJAX 呼び出しが含まれている禁止されたページに移動した場合、禁止されたページが読み込まれず、代わりにユーザーがログインにリダイレクトされても、バックグラウンドで AJAX 呼び出しが引き続き発生することに気付きました。これを回避するために、すべてのコントローラーに同じ認証チェックを追加しました。これは少し面倒になってきており、コントローラーのメソッドが実行される前に認証をグローバルにチェックする方法、またはより良い方法があるかどうか疑問に思っていました。ルート変更時の認証機能は次のとおりです。
app.run(function ($rootScope, $location, authenticationService) {
$rootScope.clearAlerts = function(){
$rootScope.alerts = []
}
$rootScope.credentials = {
username: "",
password: ""
};
$rootScope.goto = function(url){
$location.path(url);
}
$rootScope.authenticated = authenticationService.isLoggedIn()
$rootScope.logOut = function () {
authenticationService.logOut();
}
var publicRoutes = ['/login'];
$rootScope.$on('$routeChangeStart', function (event, next, current) {
$rootScope.credentials.from = $rootScope.desiredPath || '/login'
$rootScope.authenticated = authenticationService.isLoggedIn();
if (!_(publicRoutes).contains($location.path()) && !$rootScope.authenticated) {
$rootScope.desiredPath = $location.path();
$location.path('/login');
}
})
})