Невозможно предотвратить переход $ stateChangeStart на страницу входа до повторной аутентификации пользователя с сервера. - PullRequest
0 голосов
/ 03 апреля 2019

У меня проблемы с приложением AngularJS при повторной аутентификации пользователя при обновлении страницы.Я следовал руководству здесь , чтобы реализовать аутентификацию во всем приложении, однако я испытываю трудности, когда пользователь обновляет страницу.В основном происходит то, что в модуле $stateChangeStart мой код проверяет, прошел ли аутентификация пользователя, и, если нет, переход на страницу входа.Однако, поскольку приложению требуется некоторое время для повторной аутентификации пользователя на сервере, оно автоматически переходит на страницу входа, прежде чем пользователь снова войдет в систему.

Я добавил AuthResolver, как в инструкциях.и добавили resolve к моим маршрутам:

       .state( 'home', {
            url: '/',
            resolve: {
                auth: function resolveAuthentication( AuthResolver ) {
                    return AuthResolver.resolve();
                }
            },
            templateUrl: 'app/components/home/home.index.html',
            controller: 'HomeController',
            data: {
                requiresLogin: true,
            }
        })

В моем модуле app.run() первое, что я делаю, это пытаюсь повторно авторизовать пользователя:

    // Check to see if a token exists
    if( AuthService.getToken() != null ) {


        // Get the authed user details from the Server
        AuthService.getAuthUser( AuthService.getToken() )
            .then( function( user ) {


                // Create a new Session
                Session.create( user.ObjectGUID, user.Groups );


                // Set the current user
                $rootScope.currentUser = user;


            }, function( error ) {


                console.log(error);


            });


    }

Затем в моем модуле $stateChangeStart() я запускаю следующую проверку:

        // Check to see if the new state requires the user to be logged in
        if( toState.data.requiresLogin ) {


                    // Check to see if the user is authenticated already
                    if( AuthService.isAuthenticated() ) {  //<== Always returns false because it's still waiting for the `AuthService.getAuthUser()` to resolve.


                        console.log( 'user authenticated' );


                    } else {


                        console.log( 'user not authenticated' );


                        // Broadcast a not authenticated message
                        event.preventDefault();


                        $rootScope.$broadcast( AUTH_EVENTS.notAuthenticated );


                    }


        }

Однако resolve в моем домашнем маршруте никогда не вызывается, потому что мое приложение мгновенно переходит на страницу входа через $rootScope.$broadcast( AUTH_EVENTS.notAuthenticated );на странице обновления

...