ログインしていないユーザーをログインルートにリダイレクトする方法をきちんと実装しようとしています。私の解決策を別のSO回答here箱から出ない。ここに私の解決策があります。私はルートをリダイレクトできるように、私は$routeChangeError
イベントで聞くことができる場所ユーザーが認証されていない場合、ルートにリダイレクトする
angular.module('myApp', ['ngResource', 'ngRoute'])
.config(['$routeProvider', function ($routeProvider) {
var requireAuthentication = function() {
return {
load: function ($q) {
console.log('Can user access route?');
if (g_isloggedIn === true) { // fire $routeChangeSuccess
var deferred = $q.defer();
deferred.resolve();
console.log('Yes they can!');
return deferred.promise;
} else { // fire $routeChangeError
console.log('No they cant!');
return $q.reject("'/login'");
}
}
};
};
$routeProvider
.when('/some_page_that_requires_authentication', {
templateUrl: '/views/secret.html',
controller: 'secretCtrl',
resolve: requireAuthentication()
})
.when('/anybody_can_see_me', {
templateUrl: '/views/public.html',
controller: 'publicCtrl',
});
}]);
私の質問は、ありますか?私はディレクティブでそれをやってみましたが、イベントを起こすことは決してできませんでした。私はそれをコントローラに入れることはできません。なぜなら、約束が拒否されればロードされないからです。何かご意見は?
あなたは 'ng-view'要素の外にあるコントローラ(または指令)でそれを見ることができます。 – Stewie
でも 'run()'に置くことができます...あなたのコードにわずかなバグがあります... 'if'の前に' $ q.defer(); 'を呼び出す必要があります – charlietfl