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