$rootScope.$on('$routeChangeStart', function(event, next, current) を使用して、ルートに認証が必要な場合はサインイン ページにリダイレクトしています。これは完全に機能します。
サインインした後、意図したルートにリダイレクトするにはどうすればよいですか?
$rootScope.$on('$routeChangeStart', function(event, next, current) を使用して、ルートに認証が必要な場合はサインイン ページにリダイレクトしています。これは完全に機能します。
サインインした後、意図したルートにリダイレクトするにはどうすればよいですか?
これは私のために働いているものの簡略化されたバージョンです:
app = angular.module('ngApp', []).config(function ($routeProvider) {
$routeProvider
.when('/dashboard', {
templateUrl: 'dashboard.html',
controller: 'dashboardController',
loginRequired: true //
})
.when('/login', {
templateUrl: 'login.html',
controller: 'loginController'
})
.otherwise({redirectTo: '/login'})
});
次に、アプリケーションの実行ブロックで:
app.run(function ($location, $rootScope) {
var postLogInRoute;
$rootScope.$on('$routeChangeStart', function (event, nextRoute, currentRoute) {
//if login required and you're logged out, capture the current path
if (nextRoute.loginRequired && Account.loggedOut()) {
postLogInRoute = $location.path();
$location.path('/login').replace();
} else if (postLogInRoute && Account.loggedIn()) {
//once logged in, redirect to the last route and reset it
$location.path(postLogInRoute).replace();
postLogInRoute = null;
}
});
});
次の回答はOPからのものです。
これが私がそれを解決した方法です:
このイベント ブロードキャストを $routeChangeStart に追加しました
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if (next.authRequired) {
var deferred = $q.defer(),
_token = mainConfig.csrfToken;
security.getCurrentUser(true, _token).success(function (data, status, headers, config) {
if(status == 200) {
// set the local scope variables
next.scope.isAuthenticated = true;
next.scope.user = security.currentUser;
// Broadcast out to each of the listeners
$rootScope.$broadcast('currentUserAuthenticated');
// Any other response requires a signin. Redirect.
} else {
next.scope.isAuthenticated = false;
next.scope.user = null;
$rootScope.$broadcast('authenticationRequired', $location.url());
$location.path('/signin');
}
});
}
});
次に、セキュリティ ファクトリでイベントをリッスンし、次のように場所を保存しました。
$rootScope.$on('authenticationRequired', function(event, callingRoute) {
redirectRoute = callingRoute;
});