我正在使用AngularJS 1.5.0,我尝试使用$cookies
。我也尝试过使用文档中的示例代码但是它没有用,我得到了put() is not a function
。
这是LoginController
,它应该在成功登录后将令牌保存到cookie。
.success(function (response) {
$cookies["token"] = response.value.token;
$log.info("Token: " + $cookies["token"]);
});
我在控制台中获得了适当的价值,但如果我转到另一个页面并尝试从cookie中获取该值,我将获得undefined
。
在MainController
$log.info('New token:' + $cookies["token"]);
我检查了浏览器设置,并且没有来自localhost的任何cookie(我检查了Safari和Chrome)
答案 0 :(得分:1)
您是否尝试过查看Cookie是否实际设置? https://support.google.com/chrome/answer/95647?co=GENIE.Platform%3DDesktop&hl=en
如果您在设置cookie时一度设置了“httpOnly”标志,那么您的cookie确实已经设置好了,但是您无法从客户端javascript中读取它。您可以设置它,覆盖它,但除非您从服务器端读取cookie标头,否则您将无法读取它。当谈到加强安全性时,这实际上非常酷......但如果您没有意识到首先设置该标志的含义,那么可能会非常头疼。
如果您可以在浏览器的设置中看到cookie,但无法在未获得“未定义”的情况下将其打印到控制台......那么只需删除它并重置它而不使用“httpOnly”标记。
答案 1 :(得分:0)
$ cookies公开您需要使用的方法。您没有在$ cookies对象上设置属性。
例如:
$cookies.put('keyHere', 'valueHere'); // set
$cookies.get('keyHere'); // get
$cookies.putObject('key2Here', {val: "etc"}); // set
$cookies.getObject('key2Here'); // get
因此,在您的情况下,假设令牌是一个字符串,您的成功函数将执行以下操作:
function (response) {
$cookies.put("token", response.value.token);
}
您可能一直在阅读较旧的文档,因为$cookies
功能在角度版本1.3之后发生了变化。但我提到的方式是它应该如何为你工作,因为你使用角1.5。 Source