【问题标题】:Passing DataSnap Authentication Credentials with jquery and AJAX使用 jquery 和 AJAX 传递 DataSnap 身份验证凭据
【发布时间】:2012-07-12 19:24:18
【问题描述】:

我正在尝试构建一个 Delphi XE2 DataSnap Rest 服务器,用作访问我们 DBMS 的第 3 方 API。

我已经扩展了在 xe2 中使用带有身份验证和授权的 rest datasnap 向导时提供的示例方法的功能。

我可以确认,我编写的所有服务器方法在直接通过浏览器访问时都会返回预期的数据。

问题来自尝试通过 $.ajax() 调用对服务器进行身份验证。

从浏览器地址栏访问时,系统会提示您输入用户名和密码,当您同时输入“dev”时,您可以继续。

将 ajax() 用户名​​和密码参数设置为“dev”时,我收到 HTTP 401 响应。

我认为我做得对,但这里是代码 sn-p:

$("#contentdiv").click(function(){
        $.ajax({
            type:"GET",
            cache:"false",
            username:"dev",
            password:"dev",
            url:"http://192.168.0.2:8080/datasnap/rest/TServerMethods1/methodname/",
            dataType:"jsonp",
            statusCode: {
                200: function(data){
                    alert('success ');
                }
            }               
        });
});

如果我关闭身份验证,我可以成功获得 HTTP 200 响应(尽管返回的 JSON Delphi DataSnap 中有语法错误,但这是另一个问题)。

另外,值得知道的是 - 如果我手动登录然后运行 ​​ajax,它可以工作 - 我假设这是因为凭据被缓存或类似的。

这两种技术都很新,所以要温柔。 如果我遗漏了一些可能很重要的内容,请告诉我,我会在这里整理出来。

【问题讨论】:

    标签: delphi jquery delphi-xe2 datasnap


    【解决方案1】:

    您的 Ajax 代码使用 JSONP,服务器使用基本身份验证。

    this answer 上的评论说 JSONP 不能包含 Basic Auth 所需的 USER / PWD 标头:

    Basic Authentication with jQuery.ajax request and jsonp

    原因是(引用上面的答案):

    JSONP 的工作方式不同,它是通过标签包含的 GET 请求 获取文件,所以你不会发送特殊的标题或任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多