成功登录后,我设置:

$rootScope.globals = {
    currentUser: {
        username: username,
        token: token
    }
};

var cookieExp = new Date();
cookieExp.setHours(cookieExp.getHours() + 1);

$cookies.putObject('globals', $rootScope.globals, { expires: cookieExp });


当我在Mozilla Firefox中“清除所有历史记录”时,将保留用户令牌,并且可以浏览受限制的内容,直到进行明确的页面刷新为止。有什么方法可以检测到凭据已被删除而无需刷新页面?

最佳答案

为了与Cookie保持同步,globals应该在每次使用时都调用$ cookies,例如成为真理的单一来源:

app.service('globals', function ($cookies) {
  this.get = function (key) {
    return $cookies.getObject('globals');
  };
  this.set = function (key, obj) {
    var cookieExp = new Date();
    cookieExp.setHours(cookieExp.getHours() + 1);
    $cookies.putObject('globals', obj, { expires: cookieExp });
  };
});


由于cookie请求可能效率不高,因此该服务可以选择提供过期的缓存。

将根范围用作全局变量范围is antipattern

07-24 15:38