C#调用Firebase onCall函数如何获取sessionCookie字符串值?
问题解答
一、{sessionCookie}的格式
从云函数代码来看,返回的{sessionCookie}是一个JavaScript键值对象,结构如下:
- 键为字符串
sessionCookie - 值是Firebase Auth生成的字符串类型会话Cookie(一串用于身份验证的长文本)
在C#中,这个对象会被自动反序列化为Dictionary<object, object>类型,这就是你看到System.Collections.Generic.Dictionary2[System.Object,System.Object]`的原因。
二、C#中获取sessionCookie值的方法
你需要把task.Result.Data显式转换为字典类型,再通过键名取出对应值。修改后的代码示例:
string idToken = await auth.CurrentUser.TokenAsync(true); await func.GetHttpsCallable("createSessionCookie").CallAsync(idToken).ContinueWith(task => { if (task.IsCompletedSuccessfully) { // 将返回数据转换为Dictionary类型 if (task.Result.Data is Dictionary<object, object> resultDict) { // 尝试取出sessionCookie值并转为字符串 if (resultDict.TryGetValue("sessionCookie", out object cookieObj) && cookieObj is string sessionCookie) { Debug.Log($"获取到SessionCookie: {sessionCookie}"); return sessionCookie; } } Debug.Log("未找到有效sessionCookie"); return ""; } else { Debug.Log("云函数调用失败"); return ""; } }); return "";
核心要点:
- 直接调用
ToString()只会输出对象类型名,必须转换为字典才能访问内部数据 - 使用
TryGetValue可以避免键不存在时抛出异常,提升代码健壮性 - 最终得到的
sessionCookie是字符串类型,可直接用于后续身份验证逻辑
内容的提问来源于stack exchange,提问作者Choco Naak
相关产品推荐
相关产品推荐

