【问题标题】:UNAUTHENTICATED ERROR : Firebase function called from android app未经身份验证的错误:从 android 应用程序调用的 Firebase 函数
【发布时间】:2020-11-24 16:18:00
【问题描述】:

我刚刚开始在 firebase 上使用可调用函数。 我部署了一个函数,它给出了响应 hello world。 当我在本地测试它时效果很好。 现在我正在尝试从 android 应用程序中调用它。 根据这个document,这些可调用函数会自动传递认证数据并反序列化数据以获取函数中的用户id。当我按照上面文档中的建议运行时,我收到一个未经身份验证的错误。 我在应用程序中使用了 Firebase 身份验证来使用谷歌登录。我不想将其公开并保持私有,因此只有用户可以发送请求。有什么方法可以在请求的标头中手动包含身份验证。 这是调用的代码

               sendmessage(string)
                        .addOnCompleteListener {
                            if (!it.isSuccessful){
                                val e= it.exception
                                if(e is FirebaseFunctionsException){
                                    val code =e.code
                                    val details = e.details
                                    Log.d("Firebase error",code.toString()+details.toString())
                                }
                          
                            }
                            else{
                                Log.d("result obtained",it.result.toString())
                            }
                        }
private fun sendmessage(question:String): Task<String> {
        val data = hashMapOf(
            "question" to question,
            "push" to true
        )

        return functions
            .getHttpsCallable("detectIntent")
            .call(data)
            .continueWith {
                val result=it.result?.data as String
                result
            }
    }


【问题讨论】:

    标签: android firebase google-cloud-functions


    【解决方案1】:

    可调用函数不对 HTTP 标头中发生的情况提供任何控制。身份验证会根据通过 Firebase 身份验证登录的用户的状态自动处理。如果您在 context.auth 的函数中没有获得经过身份验证的用户,则表示您在登录完成之前提出了请求。

    【讨论】:

    • 但是我可以看到用户已经在 firebase 控制台的身份验证面板的用户选项卡下注册。是否需要在谷歌云控制台中为函数添加一些调用权限
    • 不,你不需要做任何额外的事情。
    • 用户在请求时需要登录。你在这里展示的任何东西都不能证明这是真的。拥有帐户是不够的 - 用户需要主动登录应用。
    • 我检查了用户是否通过 GoogleSignIn.getLastSignedInAcocunt(context) 登录,它显示用户已登录,即使在此之后对函数的调用也会出现相同的错误
    • 唯一重要的是 Firebase Auth 是否看到用户登录,而不是提供商 SDK。
    猜你喜欢
    • 2019-09-30
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 2020-03-14
    • 2017-11-27
    • 2017-04-11
    • 1970-01-01
    相关资源
    最近更新 更多