В настоящее время я внедряю ng-token-auth
в свое угловое приложение, в то время как это отлично работает, у меня возникают проблемы с ограничением доступа к определенным страницам.ng-token-auth и разрешения маршрута
В некоторых из моих маршрутов у меня есть несколько дополнительных параметров:
data: {
title: 'Dashboard',
restricted: true, // Only allow logged in users
role: 2 // Only allow a specific role
}
Я делаю это проверочный вход в $stateChangeStart
, поэтому прежде чем переключить маршруты, я могу проверить, если пользователю разрешено, что маршрут.
Я следовал ng-token-auth
предложения об использовании родительского маршрута с решимостью, чтобы проверить, если пользователь вошел в систему или нет:
resolve: {
auth: function($auth) {
console.log('validate user');
return $auth.validateUser();
}
}
Теперь проблема возникает, когда я первый загрузить приложение, очевидно $stateChangeStart
событие запускается до того, как $auth.validateUser()
был разрешен, из-за чего логин внутри $stateChangeStart
не удался, и пользователь перенаправляется на страницу входа.
Что было бы лучшим способом реализации этой «логики разрешений», я не хочу делать это по маршруту, так как это добавит много дополнительной работы и кода.
Выполнение этого в $stateChangeStart
также не представляется лучшим вариантом, так как это не работает при первой загрузке.
Почему вы не можете проверить 'auth' в' $ stateChangeSuccess'? '$ stateChangeSuccess' будет уволен только AFAIK, когда будут разрешены все обещания' resolve', в том числе 'auth'. –
@NewDev Я мог бы это сделать, но другие маршруты имеют больше обещаний 'resolve', я не уверен, что я должен заставить пользователя загружать дополнительные данные за то, к чему он не может получить доступ. –
Собственно, забудьте о '$ stateChangeSuccess'. Взгляните на этот [SO ответ] (http://stackoverflow.com/a/22540482/968155) вместо –