我正在用AngularJS构建应用程序。我具有身份验证功能,当用户未被授权时,他将被重定向到#/login
显示登录表单的位置。
但是,当用户通过身份验证并手动转到#/login
时,尽管该用户仍处于登录状态,但仍会再次显示登录页面。在这种情况下,是否可以将其定向到主页?
这是我进行重定向的方式:
$routeProvider
.when( '/ds', {
templateUrl: 'partials/datasheets-list.html',
controller: 'DatasheetsListCtrl'
} )
.when( '/ds/:datasheetId', {
templateUrl: 'partials/datasheet-detail.html',
controller: 'DatasheetDetailCtrl'
} )
.when( '/login', {
templateUrl: 'partials/login.html',
controller: 'LoginController'
} )
.otherwise( {
redirectTo: '/ds'
} );
这是代码LoginController
:
var datasheetsControllers = angular.module( 'datasheetsControllers', ['ngCookies', 'datasheetsServices'] );
datasheetsControllers.controller( 'LoginController', ['$scope', '$rootScope', '$location', '$http', '$cookieStore', 'LoginService', function ( $scope, $rootScope, $location, $http, $cookieStore, LoginService )
{
$scope.login = function ()
{
LoginService.authenticate( $.param( {username: $scope.username, password: $scope.password} ), function ( user )
{
$rootScope.user = user;
// Authenticate AngularJS Ajax calls
$http.defaults.headers.common[ xAuthTokenHeaderName ] = user.token;
// Authenticate jQuery Ajax calls
var headers = {};
headers[xAuthTokenHeaderName] = user.token;
$.ajaxSetup({
headers: headers
});
$cookieStore.put( 'user', user );
$location.path( "/" );
} );
};
}] );
我认为通常的做法是听$routeChangeStart
事件。
$scope.$on('$routeChangeStart', function(scope, next, current){
//...
});
在这里,您可以询问下一个路径是否为登录名,然后可以检查该用户是否已经登录了auth服务。如果是,请照常使用redirect将其直接重定向到登录名
或者,您可以resolve
在路由对象中使用回调
when('/login', { controller: 'LoginCtrl', templateUrl: '', resolve : {
load : function ( ... ) { ... }
})
SO上已经有类似的东西
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句