如何避免显示登录页面,如果已经登录与angularjs



我正在用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){
   //...
});

这里你可以询问下一个路径是否为login,然后你可以检查用户是否已经登录了。如果是,像往常一样使用重定向将他直接重定向到登录

或者你可以在你的路由对象

中使用resolve回调
when('/login', { controller: 'LoginCtrl', templateUrl: '', resolve : {
    load : function ( ... ) { ... }
})

上面已经有类似的东西了

AngularJS -需要$routeChangeStart和$locationChangeStart的组合

在AngularJS中,当路由被改变(动画、加载器等)时触发一个回调

我设法通过简单地将此添加到LoginController:

if( $rootScope.user )
{
    $location.path( "/" );
}

($scope.login = function ()行前)

这似乎工作得很好,但我不知道这样做是否被认为是一种不好的做法?

最新更新