0

我有一个奇怪的问题:

我们必须在 IT 领域做一个项目,因此我们使用 AngularJS。问题是,当我使用 F5 进行刷新时,页面会加载,但无法再次显示正确的内容。只有背景和我的标题,我的 UI-VIEW 中的所有内容都不存在。我们有带有重定向的登录页面:

     app.run(function($rootScope, $location, sessionFactory) {
$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams){
        let loggedIn = sessionFactory.isAuthenticated();
        if (toState.authenticate && !loggedIn) {
            event.preventDefault();
            $state.go('login');
        }
    });

});

没有这个重定向块,F5 可以工作。否则我必须去登录页面并再次登录才能让它再次工作。

对不起,我是编程新手。因此,如果您需要任何代码,请告诉我。希望有人可以提供帮助。

更新:这是我们的 authentification_service.js 一个小组成员写的。它有帮助吗?

      var app = angular.module('TheApp');

    /**
    * This service manages sessions: Retrieving token from server and storing token data.
    */
    app.factory('sessionFactory', ['$http', 'jwtDecoder', function($http, jwtDecoder) {
var sessionFactory = {
    sessionData: null
};
sessionFactory.login = function(username, password) {
    //todo: encrypt password....
    var user = { username : username, password : password};
    // returns a POST request, success or error of that request
    // must be handled by the caller of the login function
    return $http({
             method: 'POST',
             url: 'rest/auth/login',
             data: user
    });
};
sessionFactory.logout = function() {
    return $http({
             method: 'POST',
             url: 'rest/auth/logout',
             data: this.sessionData
    });
}
sessionFactory.deleteSessionData = function() {
    this.sessionData = null;
}
sessionFactory.setSessionData = function(sessionData) {
    this.sessionData = {
        token: sessionData.token,
        userData: jwtDecoder.getUserData(sessionData.token) // holds user id, todo: permissions
    };
    console.log(this.sessionData.userData);
};
sessionFactory.getToken = function() {
    return this.sessionData.token;
};
sessionFactory.getUserId = function() {
    return this.sessionData.userData.userId;
}
sessionFactory.isAuthenticated = function() {
    return this.sessionData != null;
};
return sessionFactory;
}]);

/**
* This service injects authentification token in HTTP requests.
*/
app.factory('tokenInjector', ['$injector', function($injector) {
    var tokenInjector = {
        request: function(config) {
            // cannot use sessionFactory directly, because else Angular will spot a circular dependency -> error
            var sessionFactory = $injector.get('sessionFactory');
            // if the user is logged in, add an Authorization header (with token) to each http request
            if(sessionFactory.isAuthenticated()) {
                config.headers.Authorization = 'Bearer ' + sessionFactory.getToken();
                //config.url = config.url + "?token=" + sessionFactory.getToken(); // add token to request url
            }
            return config;
        }
    };
    return tokenInjector;
}]);
/**
* Decodes JWTs received from the server with a JWT deconding lib
* and returns a useable result.
*/
app.factory('jwtDecoder', function() {
    var jwtDecoder = {};
    // extracts all needed frontend user data from token
    jwtDecoder.getUserData = function(token) {
        var payload = jwt_decode(token);
        var userData = {
            userId: payload.userId //,
            //groupId: ?,
            //permissions: payload.permissions, // is array of perm
        };
        return userData;
    }
    return jwtDecoder;
})
4

0 回答 0