【问题标题】:Jquery AJAX call requires authentificationJquery AJAX 调用需要认证
【发布时间】:2016-08-18 10:40:05
【问题描述】:

我正在尝试在 XPages 应用程序中使用 google chart api。 我正在使用文档给出的代码示例:https://developers.google.com/chart/interactive/docs/php_example#exampleusingphphtml-file

我必须通过调用 LS 代理来替换对 php 页面的调用。

      var jsonData = $.ajax({
      url: "getData.php",
      dataType: "json",
      async: false
      }).responseText;

所以我的代码转到:

     var jsonData = $.ajax({
      url: "http://server/database/agent?openagent",
      dataType: "json",
      async: false
      }).responseText;

在我的本地多米诺服务器上,它运行良好。 在生产多米诺服务器上,我什么也没得到。图表未绘制。调试完 js 客户端后,似乎 ajax 调用正在等待身份验证,即使我之前必须登录。

两台服务器都不允许匿名访问。 两种环境的安全级别似乎相同

欢迎任何帮助(如果我错了,也欢迎任何其他方式)。

谢谢

【问题讨论】:

  • 您确定不允许 Anonymous 访问您本地 Domino 服务器上的 server/database/agent?openagent 吗?检查数据库的 ACL。另外,尝试在本地 Domino 服务器和生产服务器上直接访问 server/database/agent?openagent
  • 我刚刚检查了两台服务器上代理的调用。在两台服务器上,我必须先登录才能获得代理结果 匿名条目在两个数据库上都设置为 LCA 中的无访问权限 我也尝试实施 NetDeamon 的解决方案,但没有更多结果。
  • 如果您希望匿名能够使用代理,您应该在 ACL 中为匿名提供正确的访问权限
  • 我不需要匿名访问。我需要使用用户的上下文运行代理:代理获取当前用户的数据。我将尝试通过使用 Xpage 来转换代理的调用。也许它会解决这个问题。

标签: ajax google-visualization xpages


【解决方案1】:

如果您可以在本地服务器中绘制谷歌图表,但在生产服务器中无法绘制,这意味着这是您的服务器问题。

您可以添加authentication header in your jquery ajax call 来发出经过身份验证的ajax 请求

$.ajax({
  headers: {
    "Authorization": "Bearer <TOKEN HERE>" 
  }
})

您也可以send username and password in jquery ajax call,提出认证请求。这是链接中的示例代码

$.ajax({
    type: 'GET',
    url: 'url',
    dataType: 'json',
    //whatever you need
    beforeSend: function (xhr) {
        xhr.setRequestHeader('Authorization', make_base_auth(user, password));
    },
    success: function () {});
});

function make_base_auth(user, password) {
    var tok = user + ':' + password;
    var hash = btoa(tok);
    return 'Basic ' + hash;
}

【讨论】:

  • 嗨,感谢您这么快回答。不幸的是,ajax 调用的标头不能更好地工作。我认为哈希方法的结果不是多米诺服务器所期望的凭据,我将继续调查
  • 当您登录生产服务器(通过正常登录页面)并进行正常的 ajax 调用时会发生什么。那么它会引发身份验证错误吗?在 ajax 调用的标头中传递令牌或用户名/密码只有在服务器认为时才有效,否则不会。
【解决方案2】:

最后,我尝试通过 dojo 而不是 Jquery 运行 ajax 请求。 我的代码变成了这个:

var jsonData = dojo.xhrGet({
  url: "http://server/database/agent?openagent",
    handleAs:"json",
    ...
})  

我没有在安全级别或其他任何方面进行任何更改。

我不明白为什么 jquery 语法不能像 dojo 语法那样工作。

无论如何,它现在正在工作。

非常感谢大家的建议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 2018-09-28
    • 2011-04-12
    • 2016-01-19
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多