【问题标题】:Angular's $cookies only work on 'localhost'Angular 的 $cookies 仅适用于“本地主机”
【发布时间】:2015-06-11 23:10:08
【问题描述】:

振作起来,一个奇怪的 Angular / IIS 问题来了: 我创建了一个 Angular 1.4.0 应用程序,它在用户登录后使用 $cookies 来存储 oauth 访问令牌。

每当我将网站部署到 IIS 服务器(我尝试了 Azure 和远程服务器)时,在 localhost 上运行良好的东西都会失败。我不明白为什么。它始终是相同的过程,但保存/读取 cookie 似乎只能在本地工作。

后端(带有 API)在 Azure 上运行并且没有被触及。前端始终与此 Azure-API 连接,但仅在本地托管时才有效。

你有什么想法吗? 我的代码如下所示:

$http({
    url: "/api/account/login",
    method: "POST",
    data: loginData,
    headers: {'Content-Type' : 'application/x-www-form-urlencoded; charset=utf-8'}
}).then(
    function (success) {
        $cookies.put('access_token', success.data.access_token);
        $cookies.put('refresh_token', success.data.refresh_token);

        // 'test' contains the correct token on localhost
        // 'test' is undefined whenever deployed to an iis
        var test = $cookies.get('access_token');

        deferred.resolve(results);
    },
    function (error) {
        deferred.reject({"loginError":-1})
    }
);

会不会是 IIS 有一个特殊的 cookie 策略来阻止 cookie 访问?

更新 1: 请不要误会我的意思,我不希望 IIS 管理或跟踪我的会话状态。我只想被允许使用 cookie 来存储我的 OAUTH 访问令牌。

更新 2: 有趣的事实:在登录过程后向服务器发送的第一个请求时,可以从 cookie 中读取访问令牌。之后的每个请求都会失败,因为 $cookies.access_token 未定义。我发誓(以旧神和新神)我不会删除它!

感谢每一个提示或帮助!

【问题讨论】:

  • 能否添加一些http头数据?
  • 如果 Api 在另一个域上,你应该检查你是否启用了 cors。
  • 或者你可以检查http请求中的域。

标签: angularjs azure iis cookies localhost


【解决方案1】:

您能否记录并检查您从 IIS 获得的 success.data.access_token 的值

如果是会话 cookie 令牌,则必须检查 IIS 配置。

请参考以下链接以验证会话 cookie 设置

https://technet.microsoft.com/en-us/library/cc754725(v=ws.10).aspx

【讨论】:

  • success.data.access_token 包含 OAUTH 访问令牌,我想在每个未来对我的 API 的 HTTP 请求的标头中提供它。我不想将会话状态存储在该 cookie 中。只需要访问令牌。但是,每当我将解决方案部署到 localhost 以外的其他地方时,它似乎都没有得到保存。
  • @Raja:欢迎来到 stackoverflow。请使用 cmets 解决您的问题。
猜你喜欢
  • 2018-11-16
  • 2017-02-25
  • 2023-04-05
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2012-10-08
相关资源
最近更新 更多