Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 刷新页面时删除cookie_Angularjs_Cookies - Fatal编程技术网

Angularjs 刷新页面时删除cookie

Angularjs 刷新页面时删除cookie,angularjs,cookies,Angularjs,Cookies,我正在使用angularjs和nodeJS开发一个网站,我的问题是,当在cookie中存储一个对象时,这个对象仍然在cookie中,直到我重新加载页面,这是我的代码 .service("Auth", function ($cookies, $rootScope) { var currentUser = null; return { set: function (data) { currentUser = da

我正在使用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;
            }
        }
    }
)

Cookie没有被删除,是您的currentUser局部变量正在消失。刷新页面时,存储在内存中的所有对象都将消失,身份验证服务将重建。您需要从cookies中正确地重新初始化自己,并再次设置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将被发送到服务器,但它使您的服务器有机会验证经过身份验证的用户。它提供了更好的安全性,防止有人偷饼干、饼干过期等

并停止将currentUser存储在$rootScope上。只需将其保存在局部变量中,如果有人需要currentUser,他们可以注入Auth服务