刷新页面时删除了cookie

时间:2016-09-05 12:39:31

标签: angularjs cookies

我正在使用angularjs和nodeJS开发网站,我的问题是,当在cookie中存储对象时,此对象仍将在cookie中,直到我重新加载页面,这是我的代码

.service("Auth", function ($cookies, $rootScope) {
        var currentUser = null;
        return {
            set: function (data) {
                currentUser = data;
                $cookies.putObject("user", data, {
                    secure: true,
                    expires: (new Date(new Date().setMinutes(new Date().getMinutes() + 30))).toString()
                });
                $rootScope.currentUser = currentUser;

            }
            ,
            get: function () {
                return currentUser;
            }
            ,
            isLoggedIn: function () {
                if (currentUser) {
                    return true;
                } else {
                    return false;
                }
            }
            ,
            logOut: function () {
                $cookies.remove('user');
                // currentUser = null;
                $rootScope.currentUser = null;
            }
        }
    }
)

1 个答案:

答案 0 :(得分:1)

Cookie没有被删除,它的当前用户本地变量正在消失。刷新页面时,存储在内存中的所有对象都将消失,并且将重建Auth服务。您需要从cookie中正确地重新初始化并再次设置currentUser。像这样:

.service("Auth", function ($cookies) {
    // re-read the user from the $cookies
    var currentUser = $cookies.getObject("user") || null;
    return {
        set: function (data) {
            currentUser = data;
            $cookies.putObject("user", data, {
                secure: true,
                expires: (new Date(new Date().getTime() + 30 * 60 * 1000).toString()
            });
        }
        ,
        get: function () {
            return currentUser;
        }
        ,
        isLoggedIn: function () {
            if (currentUser) {
                return true;
            } else {
                return false;
            }
        }
        ,
        logOut: function () {
            $cookies.remove('user');
            currentUser = null;
        }
    }
})

我个人认为与您的服务器通信并让它返回用户对象会更好。 Cookie将被发送到服务器,但它使您的服务器有机会验证经过身份验证的用户。它可以提供更好的安全性,防止有人窃取cookie,让它们过期等等。

并停止在$ rootScope上存储cu​​rrentUser。只需将其保存在本地变量中,如果有人想要currentUser,他们就可以注入Auth服务。