这篇文章提供了如何在CosmosDB中处理用户和权限的详细描述,甚至是一个示例。
或者,如果您只想从接收到的令牌中获取oid,并将其用作分区键,那么我会采用如下所示的方法,然后根据值创建查询。
Azure Functions v3.NET Core 3.1的安装程序(Nuget):
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.8" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.9" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.CosmosDB" Version="3.0.7" />
[FunctionName("CosmosDBAccess")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
[CosmosDB(ConnectionStringSetting = "CosmosDBConnection")]DocumentClient client,
ILogger log)
{
// Get oid from your token
var token = string.Empty;
var hasToken = req.Headers.TryGetValue("Authorization", out var tokenHeader);
if (hasToken)
{
// Assuming token is in header as "Bearer <token>"
token = tokenHeader[0].Split(" ")[1];
}
var handler = new JwtSecurityTokenHandler();
var tokenS = handler.ReadToken(token) as JwtSecurityToken;
var jti = tokenS.Claims.First(claim => claim.Type == "oid").Value;
// Create query
var uri = UriFactory.CreateDocumentCollectionUri("db", "collection");
using (var query = client.CreateDocumentQuery(uri,
new FeedOptions() { PartitionKey = new Microsoft.Azure.Documents.PartitionKey(jti) })
.AsDocumentQuery())
{
while (query.HasMoreResults)
{
// Get results
FeedResponse<Document> recordSet = await query.ExecuteNextAsync<Document>();
}
}
// more stuff
module.exports = async function (context, req) {
const { CosmosClient } = require("@azure/cosmos");
const endpoint = "<your-cosmosdb-connection>";
const key = "<your-key>"
const client = new CosmosClient({ endpoint, key });
var results = []
async function main() {
// Get oid
var oid = req.headers.authorization.split(" ")[1]
console.log(oid)
// Get Database
const { database } = await client.databases.createIfNotExists({ id: "db" });
console.log(database.id);
// Get Collection
const { container } = await database.containers.createIfNotExists({ id: "collection" });
console.log(container.id);
// Query items
const { resources } = await container.items
.query("SELECT * from c", { partitionKey: oid })
.fetchAll();
for (var r of resources)
{
results.push(r)
console.log(r.id)
}
}
main().catch((error) => {
console.error(error);
});
await main()
// Return response
context.res = {
// status: 200, /* Defaults to 200 */
body: results
};
}
下面是我的function.json 有什么想法可以摆脱这个“exception:attributeError:module'azure.functions'没有属性'in'”错误吗?
我制作了一个Azure函数(http触发器),并使用Visual Studio 2019将其部署在门户中。 该函数工作正常,我现在将添加一个绑定到我的CosmosDB。我导航到我的函数,然后单击“集成”。现在我看到了触发器、函数以及输入和输出绑定。 我应该可以在这里添加一个新的输入绑定。但我没有“添加”按钮。我做错了什么?
我对Azure函数和CosmosDB输出绑定有问题。我现在拥有的是:我从一个Cosmos DB容器中读取数据,处理一些东西,然后将结果输出回同一个DB但不同的容器。我正在使用VSCode和python,并测试了其他输出(blob、HTTP响应等),所有这些都正常工作,所以我认为这是CosmosDB的问题。 主要功能定义如下: function.json输出绑定如下: 请注意,我使用和我的扩展手动安
我一直在寻找一种技术,使用浏览器中的代码编辑器,使用Azure函数删除Cosmos数据库中的项目。我不想在VS上使用本地开发的代码,原因有很多。 这里提供了我使用的代码,我使用的是带有CosmosDB输入和输出绑定的HttpTrigger。它们的名称非常明显(inputDocument,outputDocument)。 这段代码在从db读取项目和编写新文档方面工作得非常好,但是我希望能够删除单个项
我在CosmosDB中有两个集合,和。 集合保存所有历史价格,并不断更新。 我想创建一个Azure函数,它监听< code>StockPrices更新(< code>CosmosDBTrigger),然后对触发器传递的每个< code >文档执行以下操作: 在集合中查找具有匹配代码的股票 在集合中更新股票价格 我不能用<code>CosmosDB(绑定仅在触发器传递单个项时有效)。 我看到它工作的
我对Typescript和CosmosDB是新手,这可能是一个相当愚蠢的问题,然而,我在网上搜索了一整天,也找不到适合我的解决方案。希望有人愿意帮忙。 select似乎不是typescript中定义的函数,有人能帮忙吗?