【问题标题】:Firebase Auth User Management Programatically from C#从 C# 以编程方式进行 Firebase 身份验证用户管理
【发布时间】:2022-01-23 21:27:39
【问题描述】:

我正在尝试通过我的代码在 Firebase Auth 上管理用户。我正在关注文档:https://cloud.google.com/identity-platform/docs/admin/manage-users

这是我制作的代码:

public async System.Threading.Tasks.Task<int> DeleteAsync(string email)
        {

            try {               

                GoogleCredential cred = GoogleCredential.FromFile("path\\to\\downloadfile\\Mysandboxproject.json");

                FirebaseApp.Create(new AppOptions()
                {
                    Credential = cred,
                    ServiceAccountId = "mailserviceaccount@sandboxproject.iam.gserviceaccount.com",
                });


                //Get User To Remove:
                UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByEmailAsync(email);

                await FirebaseAuth.DefaultInstance.DeleteUserAsync(userRecord.Uid);
                
                return 1;                
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

但是当它转到 GetUserByEmailAsync 的行时,它永远不会返回......不会抛出异常,也不会返回用户,当然用户永远不会被删除。 我究竟做错了什么?我是否遗漏了与 firebase 通信的连接或配置相关的内容?提前致谢。

【问题讨论】:

  • 服务帐号是否与 Firebase 在同一个项目中?它有正确的权限吗?尝试使用其他语言的功能以确定是您的配置还是底层 API 方法对您来说有多难?
  • 旁白:我鼓励您考虑使用Application Default Credentials。它将使您的代码及其部署更简单。不要忘记export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/key.json
  • 我刚刚在一个包含 Firebase Auth 的项目上尝试了等效的 Golang 代码。该项目有一个具有 Firebase Auth Admin 角色的服务帐户 (roles/firebaseauth.admin)。它奏效了。

标签: c# google-cloud-platform google-authenticator oauth-2.0


【解决方案1】:

我无法重现您的问题;以下对我有用:

PROJECT=[[YOUR-PROJECT]] # Containing Firebase Auth
ACCOUNT=[[YOUR-ACCOUNT]] # Service Account name

EMAIL="${ACCOUNT}@${PROJECT}.iam.gserviceaccount.com"

gcloud iam service-accounts create ${ACCOUNT} \
--project=${PROJECT}

gcloud iam service-accounts key create ${PWD}/${ACCOUNT}.json \
--iam-account=${EMAIL}

gcloud projects add-iam-policy-binding ${PROJECT} \
--member=serviceAccount:${EMAIL} \
--role=roles/firebaseauth.admin

export GOOGLE_APPLICATION_CREDENTIALS=${PWD}/${ACCOUNT}.json

使用 C#:

using System;
using System.Threading;
using System.Threading.Tasks;

using FirebaseAdmin;
using FirebaseAdmin.Auth;
using Google.Apis.Auth.OAuth2;

namespace app
{
  class Program
  {
    static async Task Main(string[] args)
    {
       FirebaseApp.Create();
            
       var email = "[[EMAIL ADDRESS]]";
       var record = await FirebaseAuth.DefaultInstance.GetUserByEmailAsync(email);
       Console.WriteLine($"Successfully fetched user data: {record.Uid}");
    }
  }
}

然后:

dotnet new console
dotnet add package FirebaseAdmin --version 2.2.0
dotnet run

【讨论】:

  • 谢谢 DazWilkin,我不确定我是否理解它,你在哪里运行或设置第一个代码片段。 gcloud 代码。
  • 那是建立谷歌(云)项目和运行代码所需的服务帐户。它也记录在您包含的链接中:cloud.google.com/identity-platform/docs/install-admin-sdk
猜你喜欢
  • 2013-07-10
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 2020-04-21
  • 1970-01-01
  • 2018-10-12
相关资源
最近更新 更多