小编Tom*_*cer的帖子

来自移动WebView的CORS cookie凭证在本地加载了file://

跟我说,这个需要一些解释.

我正在帮助构建混合移动Web应用程序.主要代码库是HTML5和JavaScript,它将包装在本机移动Web视图(一个电话空间)中.

部分功能要求应用程序将信息发布到由我们的客户控制的Web服务.由于其他人正在使用此Web服务,因此几乎没有空间可以更改此Web服务.我们使用HTTP POST发送JSON并从服务器接收响应.此响应的一部分是一个JSESSIONID cookie,用于管理与服务器的会话.在初始initSession()调用之后,我们需要使用每个(AJAX)请求发送JSESSIONID cookie.

当部署在移动设备上时,Web应用程序将包装在本机Web视图中,该视图通过浏览启动Web应用程序file:///path/to/app/index.html.

我们尝试的第一件事是要求我们的客户Access-Control-Allow-Origin: *在其响应头中设置允许CORS.然后我们尝试发布到服务器:

$.ajax({
  url: 'http://thirdparty.com/ws',
  data: data,
  type: "POST",
  dataType: "JSON",
  success: successCallback,
  error: failedCallback
});
Run Code Online (Sandbox Code Playgroud)

监控请求,显然没有包含cookie.仔细观察后,CORS规范中有一个特殊部分用于处理用户凭证,其中包括会话cookie.所以我修改了AJAX调用以包含这个:

$.ajax({
  url: 'http://thirdparty.com/ws',
  data: data,
  type: "POST",
  dataType: "JSON",
  success: successCallback,
  error: failedCallback,
  xhrFields { withCredentials: true }
});
Run Code Online (Sandbox Code Playgroud)

另一个错误,这次来自浏览器.更多阅读产生了以下内容:

如果第三方服务器没有响应Access-Control-Allow-Credentials: true标头,则响应将被忽略,并且不可用于Web内容.

重要说明:在响应凭证请求时,服务器必须在Access-Control-Allow-Origin标头中指定域,并且不能使用通配符.

因此,我们需要更改服务器的标头以包含Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin我们的Origin.

在这里,我们终于遇到了一个问题:使用file:// protocol加载网页时Origin,Web View发送的请求标头设置为null.因此无法由服务器解析,因此服务器无法将其设置为Access-Control-Allow-Origin.但是,如果服务器不能设置Access-Control-Allow-Origin到其他的东西比* …

javascript cookies ajax web-services cors

30
推荐指数
2
解决办法
1万
查看次数

设置Heroku环境变量而不重新启动应用程序

是否可以在重新启动应用程序的情况下设置Heroku环境变量?

我的应用通过OAuth2连接到不同的在线服务.对于我连接的每个服务,我需要设置OAuth2 ID和密码.为了将这些配置变量保留在我的代码之外,我正在使用环境变量,并在on process.env(node.js)中读取它们.

每次我向我的应用添加新服务时,我都需要为ID和机密添加相应的环境变量.我需要在推送最新代码之前执行此操作,以便当应用程序下次启动新服务连接时,OAuth2 ID和秘密变量可用.

目前我的工作流程如下:

  1. 使用Heroku工具带设置环境变量: heroku config:set <SERVICE>_ID=foo <SERVICE>_SECRET=bar
  2. 推送最新代码: git push heroku master

目前,这两个操作都将重新启动应用程序.我真的更喜欢第一个操作不重启应用程序,因为这些配置变量的更改不需要在步骤2)之前生效.通过在步骤1)重新启动,我的应用程序将遇到不必要的停机时间.

那么,有没有办法阻止步骤1)重新启动应用程序?

git heroku environment-variables node.js

10
推荐指数
1
解决办法
3765
查看次数

如何在Angular-UI Bootstrap Modal组件上单元测试'resolve'属性

我正在尝试编写一个单元测试,断言正确的变量被发送到Angular-UI Bootstrap组件的resolve属性ui.bootstrap.modal.这是我到目前为止:

// Controller
angular.module('app')
  .controller('WorkflowListCtrl', function ($scope, $modal) {
    // Setup the edit callback to open a modal
    $scope.edit = function(name) {
      var modalInstance = $modal.open({
        templateUrl: 'partials/editWorkflowModal.html',
        controller: 'WorkflowEditCtrl',
        scope: $scope,
        resolve: {
          name: function() { return name; }
        }
      });
    };
  });
Run Code Online (Sandbox Code Playgroud)

值得注意的是,该resolve.name属性必须是Angular-UI组件正常工作的功能 - 以前我曾尝试resolve: { name: name }但这不起作用.

// Unit Test
describe('Controller: WorkflowListCtrl', function () {

  // load the controller's module
  beforeEach(module('app'));

  var workflowListCtrl,
    scope,
    modal;

  // Initialize …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing jasmine angularjs angular-ui-bootstrap

7
推荐指数
1
解决办法
3653
查看次数