4

全て、

AngularJS アプリの sessionStorage にユーザー オブジェクトを格納しようとしているだけです。Chrome または FF デバッガーでこれを実行すると、sessionStorage が設定されません。これが私のAngularサービスコードです:

// Authentication/authorization Module
stonewall.authModule = angular.module("authModule", [
    // Module dependencies
    "ngStorage"
    ]);

// Authentication/authorization service tracks the current user
stonewall.authModule.service('authService', function ($localStorage, $sessionStorage) {

    // Initialize current user
    var currentUser = {};
    restoreSession();

    // Declare storage type-this may change if user selects
    // "Keep me signed in"
    var storageType = {};

    // Return the current user object
    this.getCurrentUser = function () {
        return currentUser;
    };
    // Returns whether there is a currently authorized user
    this.userAuth = function() {
        return currentUser.sid != "";
    };
    // Logout function, initializes the user object
    this.logout = function() {
        currentUser = {
            sid: "",
            status: 0,
            pswLastSet: 0,
            id: "",
            sigUID: "",
            sig: ""
        };
        //persistSession();
    };
    // Login
    this.login = function(user, subj) {
        if (user == null) return;
        currentUser = {
            sid: user.Principal.SId,
            status: user.Principal.ControlStatus,
            pswLastSet: new Date(user.Principal.PasswordLastSet),
            id: user.Identity.Id.DN,
            sigUID: user.Identity.Certificates[0].UID,
            sig: stonewall.hash(user.Principal.SId + subj.pswd),
        };
        persistSession();
    };
    // Persist to session storage
    function persistSession() {
        $sessionStorage.currentUser = currentUser;
    };
    // Restore session
    function restoreSession() {
        currentUser = $sessionStorage.currentUser;
        if (currentUser == null) {
            // Initialize to empty user
            currentUser = {
                sid: "",
                status: 0,
                pswLastSet: 0,
                id: "",
                sigUID: "",
                sig: ""
            };
        }
    };
});

そして、これは私の FF デバッグ セッションを示すスクリーン キャプチャです。persistSession が呼び出された後、$sessionStorage に私のユーザーがいることがわかります。

デバッガ

しかし、DOM インスペクタに切り替えると、sessionStorage に項目がありません...

ドム

いつものように、どんな助けでも大歓迎です。

4

1 に答える 1

4

angular の sessionStorage を正しい方法で使用していますか? セッション ストレージは angular の $window オブジェクトのプロパティなので、独自のサービス ラッパーなどを作成したかどうかはわかりません。とにかく、代わりに $window.sessionStorage を使用して、私が自分で使用する別のアプローチを示す codepen があります: http://codepen.io/chrisenytc/pen/gyGcx

于 2014-06-06T16:51:57.297 に答える