0

我正在尝试通过对 DreamFactory 的 ajax 请求进行基本身份验证,以获得 SESSION_TOKEN(或 JWT)。但以下代码失败。DreamFactory 社区论坛似乎已经过时,无法在那里发布我的问题。任何人都知道如何通过对 DreamFactory 的基本身份验证进行正确的 ajax 调用?

$.ajax({ 
    url: 'https://<dreamfactory-server>/api/v2/user/session';
    async: true,
    type:'POST',
    dataType: 'json',
    contentType: 'application/json; charset=UTF-8',
    beforeSend: function(xhr) {
        xhr.setRequestHeader("Authorization", "Basic " + btoa('hhmeier@blabla.com'+':'+'secret'));
    },
    success: function(response){
        console.log("hello success");
    },
    error: function(err) {
        console.log("hello error " + err.responseText);
    }
});

执行此代码会显示此错误消息。

{"error":{"code":400,"context":null,"message":"登录请求缺少所需的电子邮件。","status_code":400}}

似乎登录需要一个用于登录的电子邮件地址。所以尝试使用 curl 命令并在正文中使用 JSON 格式的电子邮件和密码。此调用有效,它返回一个 SESSION_TOKEN,该 SESSION_TOKEN 在通过 DreamFactory 的进一步 api 调用中工作(仅使用 http 进行测试,稍后使用 https)。

curl -i -k -3 -X POST "http://<dreamfactory-server>/api/v2/user/session" -d '{ "email" : "hhmeier@blabla.com", "password" : "secret" }' -H "Content-Type: application/json"

使用基本身份验证执行 curl 命令,它失败并出现与上面相同的错误。

curl -i -k -3 -X POST "http://<dreamfactory-server>/api/v2/user/session" --user hhmeier@blabla.com:secret -H "Content-Type: application/json"

尽管 DreamFactory 手册描述了基本身份验证的工作原理,但我无法使其工作。除了这个 curl 命令。有任何想法吗?

4

1 回答 1

1

curl 命令失败的原因是您需要使用 HTTPS。根据 DreamFactory 文档。

curl https://jdoe%40dreamfactory.com:secret@foo.com/api/v2/db/_table

此外,在您的 Ajax 调用中,您需要进行 GET 调用以获取端点。

$.ajax({ 
    url: url,
    async: true,
    type:'GET',
    dataType: 'json',
    contentType: 'application/json',
    beforeSend: function(xhr) {
        xhr.setRequestHeader("Authorization", "Basic "+btoa(username+':'+password));
    },
    success: function(json){
        ...
    },
    error: function(err) {
        ...
    }
});

如需进一步参考,请参阅这篇文章 - http://wiki.dreamfactory.com/DreamFactory/Tutorials/Basic_Auth

谢谢

于 2020-04-28T20:10:11.117 回答