查询DataObject时,Syncano“403您无权执行此操作”

时间:2016-03-30 10:08:33

标签: syncano

我正在尝试在类中查询DataObjects。我正在使用Data Object - List文档底部的“试用”表单,但我得到403“您无权执行此操作”响应。

我正在提供API密钥,实例名称,我尝试过一个简单的查询,没有查询。

我已经检查了Class上的“其他”权限,并将其设置为“read”。对类中唯一的DataObject的“其他”权限也是如此。

我通过Javascript尝试包含这样的userKey:

var Syncano = require("syncano")
var conn = Syncano({ apiKey: config.apiKey })
var DataObject = conn.DataObject

app.use("/:un", function(inReq, inResp, inNext)
{
    var list =
    {
        instanceName: config.instance,
        userKey: inResp.locals.userKey,
        className: "member",
    }
    var query =
    {
        path: inReq.params.un
    }

    DataObject.please()
        .list(list)
        .filter(query)
        .then(function(inResult)
    {
        sLogger.info("Result: " + JSON.stringify(inResult))
        inResp.render("user")
    })
    .catch(function(inError)
    {
        sLogger.error("Failed to get user: ", inError)
    })
})

但我仍然得到403“您无权执行此操作”。

解决方案:

解决方案(感谢@ mariusz-wiśniewski)是将apiKey和userKey传递给Syncano()构造函数:

var Syncano = require("syncano")

app.use("/:un", function(inReq, inResp, inNext)
{
    var conn = Syncano({ apiKey: config.apiKey, userKey: inResp.locals.userKey })
    var DataObject = conn.DataObject
    var list =
    {
        instanceName: config.instance,
        className: "member",
    }
    var query =
    {
        path: inReq.params.un
    }

    DataObject.please()
        .list(list)
        .filter(query)
        .then(function(inResult)
    {
        sLogger.info("Result: " + JSON.stringify(inResult))
        inResp.render("user")
    })
    .catch(function(inError)
    {
        sLogger.error("Failed to get user: ", inError)
    })
})

1 个答案:

答案 0 :(得分:3)

作为一般规则,使用API​​密钥下载对象,始终需要将其与用户密钥组合(不幸的是,无法使用Try it功能发送用户密钥。)

将API密钥与Ignore ACLAllow anonymous usage一起使用时,只有例外情况。 (见:https://laravel.com/docs/5.1/queries#joins)。

我会避免使用忽略acl的公共共享密钥,但是allow anonymous usage可以在没有任何安全问题的情况下共享密钥。

(基于https://www.evernote.com/l/AZbAfuRwRpJBdovrEpr6N3nUaygUvpHmsAw