从 C# 以编程方式进行 Firebase 身份验证用户管理

Posted

技术标签:

【中文标题】从 C# 以编程方式进行 Firebase 身份验证用户管理【英文标题】:Firebase Auth User Management Programatically from C# 【发布时间】: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)。它奏效了。 【参考方案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

以上是关于从 C# 以编程方式进行 Firebase 身份验证用户管理的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式获取 Firebase 中的注册用户列表 [重复]

如何从 C# 发送 FireBase 自定义推送通知?

Firebase 以管理员身份进行身份验证

在 iOS 上使用 Firebase SDK 作为全新设备开始

能否以编程方式从 ios 应用端访问 bigquery 或 Firebase 分析数据?

以编程方式使用证书身份验证配置 WCF 服务客户端