我使用电子邮件密码用户授权并尝试实施"记住我"功能,到目前为止都没有运气。
我已经尝试了令牌模式(电子邮件传递登录 - >请求firebase令牌 - >存储令牌,然后在用户打开时使用SignInWithCustomTokenAsync()
将令牌重播回服务器再次游戏),但每次都有异常消息失败
自定义令牌格式不正确。请查看文档。
所以我的问题是,如果Firebase令牌被认为是Firebase格式不正确(它是一个有效的JWT,我检查过),那么你如何坚持用户会话呢?
当然,我可以将用户的电子邮件和密码存储在playerprefs
或其他任何地方,但这是一种非常糟糕的安全措施,我不会用10英尺的极点触摸它。
答案 0 :(得分:1)
据我所知(我不是专家),您无法通过Unity SDK创建令牌。您需要运行Admin SDK(https://firebase.google.com/docs/auth/admin/create-custom-tokens),使用它生成它们并将它们发送到客户端。 SDK中的TokenAsync功能仅生成ID令牌。不是访问令牌。
但是,几天前我基于此实现了一个解决方案,但却发现Admin SDK生成的自定义令牌的到期时间限制为3600秒(1小时)。这是非常短的,最终它并没有真正帮助我自动登录用户,如果他们遭受了崩溃或刚刚终止应用程序。
我希望能够更多地自定义自定义令牌,以便设置更长的到期时间等等。
答案 1 :(得分:1)
这是一个老问题,但Firebase实际上会在会话之间存储用户。你可以说默认情况下内置了“记住我”。您应该有一个附加到FirebaseAuth.DefaultInstance.StateChanged
的侦听器,并且一旦初始化完成就会自动调用它。如果调用StateChanged
并FirebaseAuth.DefaultInstance.CurrentUser != null
,则您已登录,并且可以自动跳过登录屏幕。
我不知道这是否是最佳做法,但我通常在项目开始时有一个“登录...”提示,持续10秒后才显示登录屏幕。如果FirebaseAuth.DefaultInstance.StateChanged
提示登录,显然10秒会提前结束(通常在1秒内)。