【问题标题】:Syncano "403 You do not have permission to perform this action" while querying DataObject查询 DataObject 时同步“403 您无权执行此操作”
【发布时间】:2016-03-30 10:08:32
【问题描述】:

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

我提供了 API 密钥、实例名称,并且我尝试过使用简单查询和不查询。

我检查了类的“其他”权限,并将其设置为“读取”。类中唯一 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)
    })
})

【问题讨论】:

    标签: syncano


    【解决方案1】:

    作为一般规则,使用 API 密钥下载对象总是需要将其与用户密钥结合使用(不幸的是,无法使用 Try it 函数发送用户密钥)。

    只有当您使用带有Ignore ACLAllow anonymous usage 的API 密钥时例外。 (见:https://www.evernote.com/l/AZbAfuRwRpJBdovrEpr6N3nUaygUvpHmsAw)。

    我会避免使用忽略 acl 的公共共享密钥,但您可以共享带有 allow anonymous usage 的密钥,而无需担心任何安全问题。

    (基于http://docs.syncano.io/docs/authentication

    【讨论】:

    • 我更新了问题以显示我用来尝试包含 userKey 的代码,但我仍然收到权限错误。
    • @Rick 尝试在conn 对象中传递用户密钥,即在 Syncano 构造函数中传递它,在 API 密钥旁边,例如var conn = Syncano({ apiKey: config.apiKey, userKey: inResp.locals.userKey })
    • 谢谢,这似乎奏效了。遗憾的是“尝试一下”不支持这一点,并且 DataObject.list 文档并没有更清楚地说明这一点。此外,文档错误地显示“query()”而不是“filter()”。
    • @Rick 我更新了“尝试”它以使数据对象也接受用户密钥,希望它有所帮助。感谢您的反馈!
    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2018-12-28
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多