【问题标题】:Send a cookie in http requests from frontend to backend with Angular使用 Angular 在从前端到后端的 http 请求中发送一个 cookie
【发布时间】:2015-05-11 18:21:31
【问题描述】:

我正在使用 AngularJS 开发一个网络应用程序。

应用程序通过以下方式实现:

  • 一个前端,一个没有逻辑的组件,它简单地多次查询一个后端,以便从它接收所有需要的数据;
  • 一个后端,包含许多 RESTful 服务,每个服务都向前端返回数据(如果前端调用它)。

在我的前端,在主控制器中,我使用 $cookieStore 创建了一个 cookie,方式如下:

// Setting sessionID in the cookie
$cookieStore.put('sessionID', $scope.contextData.sessionId);

现在,我想将此 cookie 的信息发送到我调用的通用后端服务。例如,我的一个电话有这种形式:

$http({
       method: "GET",
       url: urlBase + "/context/person"
    }).success(function(result, status, headers, config) {
        $scope.currentPerson = result;
    });

如何发送 cookie? 提前致谢。

【问题讨论】:

  • $cookieStore 已弃用,请尝试使用 $cookies.put()

标签: angularjs angular-http angular-cookies


【解决方案1】:

你应该设置参数withCredentialsdocs

默认情况下,调用是在没有 Cookie 的情况下进行的。由于这是一个简单的 GET 请求,它没有被预检,但浏览器将拒绝任何没有 Access-Control-Allow-Credentials: true 标头的响应,并且不会使响应可用于调用 Web 内容。

我假设您在服务器的同一域中运行脚本,因为

由于只有在您的域上运行的 JavaScript 才能读取 cookie,因此您的服务器可以确信 XHR 来自在您的域上运行的 JavaScript。跨域请求不会设置header。

【讨论】:

    【解决方案2】:
    $http({
       method: "POST",
       url: urlBase + "/context/person"
    }).success(function(result, status, headers, config) {
        $scope.currentPerson = result;
    });
    

    或者您可以使用角度快捷方式:

    $http.post('/someUrl', data, config).then(successCallback, errorCallback);
    

    POST 方法会将 cookie 发送到后端。在后端,您可以使用 JSON.parse(req.cookies) 获取您的 cookie。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-15
      • 2019-07-17
      • 2021-08-15
      • 2021-11-30
      • 1970-01-01
      • 2018-08-07
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多