Я использую следующие решения в своих проектах:
Определить глобальный контроллер и реагировать в случае изменения состояния:
//GLOBAL controller
angular.module("app.controllers").controller("GlobalController", ["$rootScope", "$state",
//Check state authentication
$rootScope.$on("$stateChangeStart", function(event, toState) {
if (toState.data.public === false && !($rootScope.user)) {
event.preventDefault();
$state.go("login");
}
});
}
]);
в каждом состоянии использовать пользовательские данные атрибут data.public для предотвращения несанкционированного доступа:
angular.module("app").config(["$stateProvider", function($stateProvider){
$stateProvider.state("login", {
url: "/login",
templateUrl: "loginTpl.html",
controller: "LoginCtrl",
data: {
public: true
}
});
}]);
При успешной регистрации, установите $ rootScope.user к соответствующему объекту пользователя!
Edit: Для вашего конкретного случая использования, вы можете использовать URL-адрес Params (выписка отправитель = телеги?), Чтобы решить эту проблему. В вашем использовании контроллера оформления заказа следующие:
if($stateParams.sender == "cart")
//ok
}else{
$state.go("cart");
}
В кнопке вашей корзине:
ui-sref="checkout({sender: 'cart'})"