停止浏览器返回ui路由器-angularjs
一旦我登录到应用程序中,若我在浏览器中单击“后退”按钮,它将不会再次返回到登录页面(此时“后退”按钮应禁用) 从登录页面,我进入app.home状态,一旦我点击后退按钮,它就不应该进入登录页面(浏览器后退按钮应该是禁用的)停止浏览器返回ui路由器-angularjs,angularjs,angular-ui-router,Angularjs,Angular Ui Router,一旦我登录到应用程序中,若我在浏览器中单击“后退”按钮,它将不会再次返回到登录页面(此时“后退”按钮应禁用) 从登录页面,我进入app.home状态,一旦我点击后退按钮,它就不应该进入登录页面(浏览器后退按钮应该是禁用的) 提前感谢。我认为您必须处理一些基本路线和存储实施 将此结构作为身份验证的简单示例: 我们有主URL,默认的,我们有一个登录页面和一个秘密页面 // Route configuration var Config = function($stateProvider
提前感谢。我认为您必须处理一些基本路线和存储实施 将此结构作为身份验证的简单示例: 我们有主URL,默认的,我们有一个登录页面和一个秘密页面
// Route configuration
var Config = function($stateProvider, $urlRouterProvider){
$stateProvider
.state('home', {
url : '/',
templateUrl : 'home.html'
})
.state('login', {
url : '/login',
controller : 'LoginCtrl',
templateUrl : 'login.html'
})
.state('secret', {
url : '/secret',
templateUrl : 'secret.html',
authenticate : true
})
$urlRouterProvider.otherwise("/");
};
// Dependencie injection
Config.$inject = [
'$stateProvider',
'$urlRouterProvider'
];
// Module declaration
app.config(Config);
机密页仅对经过身份验证的用户可用,因此您在状态本身中放置了一个参数,以指示此页需要某种身份验证
要处理身份验证过程,如重定向,可以创建一个运行函数,该函数将有一个事件,监听状态更改
如果您将访问需要验证的页面,您将检查该页面并将用户重定向到登录页面
如果用户已经登录并尝试手动转到登录页面,则您会将其重定向到主页,可能会显示一条反馈消息
// Initialize the application
var Init = function($rootScope, $state){
$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {
var isLogged = localStorage.getItem('auth');
if(toState.authenticate && isLogged === null){
event.preventDefault();
// Set the url where you will redirect the user after the authentication
$rootScope.returnToState = toState.name;
// Redirect to the login page
$state.go('login');
}
if(isLogged && toState.name === 'login'){
event.preventDefault();
// Redirect to the homepage if the page is the login and
// you are already logged in
$state.go('home');
}
});
};
// Dependencie injection
Init.$inject = [
'$rootScope',
'$state'
];
// Module declaration
app.run(Init);
登录控制器在这里非常简单,但是您可以做任何您想提供身份验证的事情,并保存您需要的所有参数
// Login Controller
var LoginCtrl = function($scope, $rootScope, $state){
// Share methods
$scope.authenticate = function(){
// Do whatever you want to validate credentials
localStorage.setItem('auth', true);
var redirectPath = angular.isUndefined($rootScope.returnToState) ? 'home' : $rootScope.returnToState;
$state.go(redirectPath);
};
};
// Dependencie injection
LoginCtrl.$inject = [
'$scope',
'$rootScope',
'$state'
];
// Module declaration
app.controller('LoginCtrl', LoginCtrl);
您不能禁用浏览器按钮,但如果用户将其重定向到主页,您可以在登录控制器中检查用户是否已登录。如果单击“注销”,该怎么办?,当时我们需要重定向到登录页面knw…我们如何区分浏览器后退按钮单击和注销按钮单击?我不明白你的意思,我想你还没有清除通用的身份验证机制。
// Login Controller
var LoginCtrl = function($scope, $rootScope, $state){
// Share methods
$scope.authenticate = function(){
// Do whatever you want to validate credentials
localStorage.setItem('auth', true);
var redirectPath = angular.isUndefined($rootScope.returnToState) ? 'home' : $rootScope.returnToState;
$state.go(redirectPath);
};
};
// Dependencie injection
LoginCtrl.$inject = [
'$scope',
'$rootScope',
'$state'
];
// Module declaration
app.controller('LoginCtrl', LoginCtrl);