我最近从角度1.2(原始代码)升级到1.3(打破了cookie)到今天的1.4($cookieStore现已弃用$cookies)
我添加了一行$cookies.putObject(‘user’,user);但它没有保存到cookie(我在chrome资源选项卡中验证)
/** * Authenticate user * * @param {Object} user - login info * @param {Function} callback - optional * @return {Promise} */ login: function (user,callback) { var cb = callback || angular.noop; return Session.save({ email: user.email,password: user.password },function (user) { $rootScope.currentUser = user; $cookies.putObject('user',user); //does not save return cb(); },function (err) { return cb(err); }).$promise; },
我在$cookies.putObject之后放了一个断点,当我在chrome控制台中尝试$cookies.getObject(‘user’)时,我得到了未定义的.
这是一个问题,因为现在每当我刷新页面时,我都会失去登录用户. Auth.js服务有这个排队:
// Get currentUser from cookie $rootScope.currentUser = $cookies.getObject('user') || null;
解决方法
我注意到angular在控制台发出警告……我错过了.我的目标是超过4093的cookie大小限制.我的是4207.
所以我所做的是将userId保存到cookie …这允许我对登录用户的所有检查工作,并更新代码以从服务器获取登录的用户对象.
我最初将用户对象放在localStorage中,但这成了管理的噩梦 – 每当用户更新时(可能发生在应用程序的多个位置)……我将不得不刷新localStorage.
相反,我在每个页面刷新时执行此操作:
// Get currentUser from cookie $rootScope.currentUser = $cookies.get('userId'); User.get().$promise .then(function(user){ $rootScope.currentUser = user._id && user || null; });