gpt4 book ai didi

c# - 从需要身份验证的 Firebase 数据库加载数据会抛出错误 firebase 无法解析身份验证 token

转载 作者:行者123 更新时间:2023-11-30 12:39:36 25 4
gpt4 key购买 nike

我有一个网站,它使用 Azure 上的 SQL Server 来处理所有数据。我正在与另一家公司合作,为我的数据库中存在的特定记录获取额外的补充信息。

当查看这些“特定记录”时,我想提供另一个链接以从 Firebase 数据库中检索该补充信息。

所以,我正在尝试编写一个服务来检索这些数据,这是我目前作为 PoC 编写的内容:

private readonly string firebaseUrl = "https://{myproject}.firebaseio.com/";
private readonly string authToken = "x:xxxxxxxxxxx:xxx:xxxxxxxxxxxxxxxx";

public async Task<IEnumerable<InMatchStat>> GetInMatchStats()
{
try
{
var firebase = new FirebaseClient(firebaseUrl, new FirebaseOptions { AuthTokenAsyncFactory = () => Task.FromResult(authToken) });

var stats = await firebase.Child("my/collection/path").OnceAsync<InMatchStat>();

if (stats == null || !stats.Any())
{
return null;
}

return await Convert(stats.AsEnumerable());
}
catch (Exception exception)
{
var message = exception.ToString();
}

return null;
}

这是我在尝试执行 var stats = await firebase.Child().... 调用时从 Firebase 返回的错误:

firebase could not parse auth token

这是 FirebaseDatabase.NET Github 页面的链接:https://github.com/step-up-labs/firebase-database-dotnet

以防该链接将来失效,这是我正在尝试复制的确切示例,该示例显示在该站点上:

var auth = "ABCDE"; // your app secret
var firebaseClient = new FirebaseClient(
"<URL>",
new FirebaseOptions
{
AuthTokenAsyncFactory = () => Task.FromResult(auth)
});

以及该页面的查询示例:

var firebase = new FirebaseClient("https://dinosaur-facts.firebaseio.com/");
var dinos = await firebase
.Child("dinosaurs")
.OrderByKey()
.StartAt("pterodactyl")
.LimitToFirst(2)
.OnceAsync<Dinosaur>();

foreach (var dino in dinos)
{
Console.WriteLine($"{dino.Key} is {dino.Object.Height}m high.");
}

我的实现哪里出了问题?

最佳答案

只是想得到这个更新,因为我终于找到了解决方案,对我来说......

这是我从以下位置获得解决方案的地方:https://github.com/step-up-labs/firebase-database-dotnet/issues/60

此版本通过电子邮件地址和密码来获取身份验证 token 。一旦我们有了 token ,它就会像以前一样传递给 Firebase 客户端。

(注意:我需要添加 FirebaseAuthentication.net nuget 包)

public async Task<IEnumerable<InMatchStat>> GetInMatchStats()
{
const string firebaseUrl = "https://xxxxxxxxxxxxxx.firebaseio.com/";
const string firebaseUsername = "xxxxxxxxxxxxxxxxxxxxx@xxxxx.xxx";
const string firebasePassword = "xxxxxxxx";
const string firebaseApiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

bool tryAgain = false;
FirebaseAuthLink token = null;

try
{
var auth = new FirebaseAuthProvider(new FirebaseConfig(firebaseApiKey));

do
{
try
{
token = await auth.SignInWithEmailAndPasswordAsync(firebaseUsername, firebasePassword);
}
catch (FirebaseAuthException faException)
{
// checking for a false tryAgain because we don't want to try and create the account twice
if (faException.Reason.ToString() == "UnknownEmailAddress" && !tryAgain)
{
// create, then signin
token = await auth.CreateUserWithEmailAndPasswordAsync(firebaseUsername, firebasePassword, "Greg", false);
tryAgain = true;
}

throw;
}
catch (Exception)
{
throw;
}
}
while (tryAgain);

var firebase = new FirebaseClient(firebaseUrl, new FirebaseOptions { AuthTokenAsyncFactory = () => Task.FromResult(token.FirebaseToken) });
var stats = await firebase.Child("my/collection/path").OnceAsync<InMatchStat>();

if (stats == null || !stats.Any())
{
return null;
}

//return await Convert(stats.AsEnumerable());
}
catch (Exception exception)
{
var message = exception.ToString();
}

return null;
}

关于c# - 从需要身份验证的 Firebase 数据库加载数据会抛出错误 firebase 无法解析身份验证 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44804770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com