查询 DataObject 时 Syncano“403 您无权执行此操作”
Syncano "403 You do not have permission to perform this action" while querying DataObject
我正在尝试查询 class 中的数据对象。我正在使用 Data Object - List 文档底部的 "Try It" 表单,但收到 403 "You do not have permission to perform this action" 响应。
我提供了 API 键、实例名称,我尝试了一个简单的查询,但没有查询。
我检查了 Class 的 "other" 权限,它被设置为 "read"。 "other" 对 Class 中唯一 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"You do not have permission to perform this action"。
解法:
解决方案(感谢@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)
})
})
作为一般规则,使用 API 密钥下载对象,总是需要将其与用户密钥结合使用(不幸的是,无法使用 Try it
函数发送用户密钥)。
唯一的例外是当您将 API 键与 Ignore ACL
或 Allow anonymous usage
一起使用时。 (参见:https://www.evernote.com/l/AZbAfuRwRpJBdovrEpr6N3nUaygUvpHmsAw)。
我会避免 public 与 ignore acl 共享密钥,但是带有 allow anonymous usage
的密钥您可以在没有任何安全问题的情况下共享。
我正在尝试查询 class 中的数据对象。我正在使用 Data Object - List 文档底部的 "Try It" 表单,但收到 403 "You do not have permission to perform this action" 响应。
我提供了 API 键、实例名称,我尝试了一个简单的查询,但没有查询。
我检查了 Class 的 "other" 权限,它被设置为 "read"。 "other" 对 Class 中唯一 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"You do not have permission to perform this action"。
解法:
解决方案(感谢@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)
})
})
作为一般规则,使用 API 密钥下载对象,总是需要将其与用户密钥结合使用(不幸的是,无法使用 Try it
函数发送用户密钥)。
唯一的例外是当您将 API 键与 Ignore ACL
或 Allow anonymous usage
一起使用时。 (参见:https://www.evernote.com/l/AZbAfuRwRpJBdovrEpr6N3nUaygUvpHmsAw)。
我会避免 public 与 ignore acl 共享密钥,但是带有 allow anonymous usage
的密钥您可以在没有任何安全问题的情况下共享。