GVKun编程网logo

javascript – Firebase在聚合物中共享身份验证

13

在本文中,我们将为您详细介绍javascript–Firebase在聚合物中共享身份验证的相关知识,此外,我们还会提供一些关于c#–从Firebase数据库加载需要身份验证的数据抛出错误firebas

在本文中,我们将为您详细介绍javascript – Firebase在聚合物中共享身份验证的相关知识,此外,我们还会提供一些关于c# – 从Firebase数据库加载需要身份验证的数据抛出错误firebase无法解析身份验证令牌、Firebase 身份验证:身份验证期间未收到来自 FirebaseUser 的电子邮件、FirebaseAuth:通用身份验证“FirebaseAuth(FirebaseApp var1)”和 .getInstance() 版本之间有什么区别:、Firebase在dataSnapshot(javascript API)中获取参考URL的完整路径的有用信息。

本文目录一览:

javascript – Firebase在聚合物中共享身份验证

javascript – Firebase在聚合物中共享身份验证

我目前正在使用firebase集成在聚合物1.7中构建应用程序.集成还使用入门工具包中的铁页.

我的问题是了解可用或最佳使用的最佳建筑模式.

index.html: <app></app>
    app.html: 
      <firebase-app>
      <firebase-auth>
      <firebase-document> (query)
      <firebase-document> (query)

      <iron-pages>
        <profile uid="[[user]]" data="[[data]]">
        <login uid="[[user]]">
        <contact>
        <latest data="[[data]]">

我已经内置了页面切换器,它工作正常,但如果我想验证页面似乎令人费解,每次传递用户绑定.

此外,我想将其分开,以便在组件内运行查询,它获取所需的所有信息.我目前正在构建一个庞大的app.html,它似乎没有使用Web组件原则编写.

什么是推荐?

解决方法

你可以使用< iron-Meta>用于在dom树和< iron-Meta-query>之间共享信息的组件获取这些数据.

例如,您可以在父组件中定义iron-Meta

<iron-Meta id="data" key="shared" value='{
     "id": "1"
   }'>
</iron-Meta>

然后获取一些孩子使用的数据

<iron-Meta-query key="shared" value="{{sharedValue}}">

有关使用< iron-Meta>的更多信息组件见Polymer documentation

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

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

我有一个网站,它利用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()…. call时从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

此版本传递电子邮件地址和密码以获取身份验证令牌.然后,一旦我们拥有令牌,就会像以前一样将其传递给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;
}

Firebase 身份验证:身份验证期间未收到来自 FirebaseUser 的电子邮件

Firebase 身份验证:身份验证期间未收到来自 FirebaseUser 的电子邮件

如何解决Firebase 身份验证:身份验证期间未收到来自 FirebaseUser 的电子邮件?

我已经在我的 Android 应用中使用 Google 实现了 Firebase 身份验证。当我尝试使用它登录时,我收到 null 作为来自 FirebaseUser 班级的电子邮件:

    private fun firebaseAuthWithGoogle(idToken: String) {
        val credential = GoogleAuthProvider.getCredential(idToken,null)
        auth.signInWithCredential(credential)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        // Sign in success,update UI with the signed-in user''s information
                        Log.d(TAG,"signInWithCredential:success")
                        val user = auth.currentUser

                      if(user.email != null) {
                        sendUserDetailToServer()
                        updateUI(user)
                      }

                    } else {
                        // If sign in fails,display a message to the user.
                        Log.w(TAG,"signInWithCredential:failure",task.exception)
                        updateUI(null)
                    }
                }
    }

我可以获得其他详细信息,例如姓名、uid 等。

解决方法

您需要将其存储在数据库 firebase auth 中而不返回,但您可以为此使用 admin sdk

admin.auth().getUser(uid)
admin.auth().getUserByEmail(email)
admin.auth().getUserByPhoneNumber(phoneNumber)  
,

为了能够使用与经过身份验证的用户对应的 Gmail 地址,您需要从 authResult 获取它,并且从 FirebaseUser 对象中获取,因为它尚未更新。所以,而不是以下代码行:

val user = auth.currentUser

请使用:

val email = task.result?.user?.email

FirebaseAuth:通用身份验证“FirebaseAuth(FirebaseApp var1)”和 .getInstance() 版本之间有什么区别:

FirebaseAuth:通用身份验证“FirebaseAuth(FirebaseApp var1)”和 .getInstance() 版本之间有什么区别:

如何解决FirebaseAuth:通用身份验证“FirebaseAuth(FirebaseApp var1)”和 .getInstance() 版本之间有什么区别:?

当我使用其构造函数 FirebaseAuth(FirebaseApp var1) 创建 FirebaseAuth 时,我遇到了一个问题:

普通认证和 .getInstance() 版本有什么区别:

.getInstance() 为您提供“getAppInstance()”又名:订阅 Firebase 应用的授权。

您的应用的“全局身份验证”(如果您愿意)。

那么奇怪的事情是什么?如果您使用 FirebaseAuth(FirebaseApp var1) 构造函数,默认情况下它不会使用此“全局身份验证”,但当直接在其中执行操作时,它仍会注册回调(没有 getInstance() ofc)。

这意味着您可以在 2 个不同的视图模型中拥有 2 个不同的 FirebaseAuth 实例化对象,以及它们的侦听器,只要它们通过 .getInstance().addAuthStateListener() 连接;两者都会收到相同的回调,即使只有其中一个收到强制更改其身份验证状态的执行...这似乎很明显,

但是如果您在没有 .getInstance() 的情况下执行上述操作,则只有一个对象会注册回调,只要它们是通过 FirebaseAuth(FirebaseApp var1) 手动构造的。

另一种情况:

如果你:

.getInstance().addAuthStateListener(); ---> 然后 ---> .signOut() (没有 getInstance());

// 没有注册任何东西,即使是您正在执行 .singOut() 的同一个 auth 对象的侦听器也没有注册;

但是如果:

.addAuthStateListener(); ---> 然后 ---> .signOut() (与 FirebaseAuth(FirebaseApp var1) 构造函数)

//然后一切照常进行,但同一应用中的 Firebase 身份验证的其他实例将不会收到任何回调,只会收到您正在执行执行的身份验证对象。

现在这种行为在理论上会使人看起来可以同时在多个身份验证中唱歌,但通过对 SO 的简单扫描,情况似乎并非如此。

为什么开发者这样做? (也许我是唯一不确定的人..)为什么不默认为您提供全局身份验证? ...但人们仍在创建幻影 FirebaseApps 以避免在注册时登录,因此这似乎无法解决任何问题或根本没有任何用处。

或者那个构造函数可以解决所有问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Firebase在dataSnapshot(javascript API)中获取参考URL的完整路径

Firebase在dataSnapshot(javascript API)中获取参考URL的完整路径

说我有以下内容:
var firebaseARef = new Firebase("http://this.is.my/firebase/url/A/reference")
var firebaseBRef = new Firebase("http://this.is.my/firebase/url/B/reference")

当我定义我的.on()函数时,我想指定一个处理程序,然后在我的代码中的一个地方执行所有处理,而不是必须使用.on()定义内联定义函数.为了显示:

var handleAllFirebaseStuff = function(dataSnapshot){
    var name = dataSnapshot.name(); //PROBLEM HERE: returns "reference",no way to distinguish!
    switch(name){
       case "http://this.is.my/firebase/url/A/reference": //How do I get this full reference from dataSnapshot?
          /* do stuff for A reference */
       case "http://this.is.my/firebase/url/B/reference": //How do I get this full reference from dataSnapshot?
          /* do stuff for B reference */
       default:
          break;
    }
}

firebaseARef.on('value',handleAllFirebaseStuff);
firebaseBRef.on('value',handleAllFirebaseStuff);

问题是dataSnapshot.name()只会在两种情况下都返回“reference”,因此无法区分switch / case语句中的两个引用!

我确定dataSnapshot在某个地方包含这些信息,但我还没有以任何方便的方式发现它.在控制台中探索dataSnapshotobject,我发现有一个隐藏在被调用路径中的对象,其中包含(除其他外)一个数组,使用上面的例子,它将包含[“firebase”,“url”,“A”,“引用“],但没有简单的方法来访问它.

如果我有权访问该数组,我可以重建URL或找到一种更方便的方法来处理switch / case语句.我认为完整的参考字符串更适合作为dataSnapshot中易于访问的值.

解决方法

要从快照返回到完整URL,您可以:
snapshot.ref().toString()

toString部分有点违反直觉.我经常发现自己不得不对它进行测试,看看是否真的要走了.

提示如果还有一个更明确的getUrl方法提示,那将是很好的

更新:

最近的SDK版本为ref is no longer a function,因此您必须使用:

snapshot.ref.toString();

我们今天的关于javascript – Firebase在聚合物中共享身份验证的分享就到这里,谢谢您的阅读,如果想了解更多关于c# – 从Firebase数据库加载需要身份验证的数据抛出错误firebase无法解析身份验证令牌、Firebase 身份验证:身份验证期间未收到来自 FirebaseUser 的电子邮件、FirebaseAuth:通用身份验证“FirebaseAuth(FirebaseApp var1)”和 .getInstance() 版本之间有什么区别:、Firebase在dataSnapshot(javascript API)中获取参考URL的完整路径的相关信息,可以在本站进行搜索。

本文标签: