Firebase Unity插件:如何持久保存用户会话? (自动登录)

时间:2016-11-23 13:27:03

标签: c# unity3d firebase firebase-authentication

我使用电子邮件密码用户授权并尝试实施"记住我"功能,到目前为止都没有运气。

我已经尝试了令牌模式(电子邮件传递登录 - >请求firebase令牌 - >存储令牌,然后在用户打开时使用SignInWithCustomTokenAsync()将令牌重播回服务器再次游戏),但每次都有异常消息失败

  

自定义令牌格式不正确。请查看文档。

所以我的问题是,如果Firebase令牌被认为是Firebase格式不正确(它是一个有效的JWT,我检查过),那么你如何坚持用户会话呢?

当然,我可以将用户的电子邮件和密码存储在playerprefs或其他任何地方,但这是一种非常糟糕的安全措施,我不会用10英尺的极点触摸它。

2 个答案:

答案 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的侦听器,并且一旦初始化完成就会自动调用它。如果调用StateChangedFirebaseAuth.DefaultInstance.CurrentUser != null,则您已登录,并且可以自动跳过登录屏幕。

我不知道这是否是最佳做法,但我通常在项目开始时有一个“登录...”提示,持续10秒后才显示登录屏幕。如果FirebaseAuth.DefaultInstance.StateChanged提示登录,显然10秒会提前结束(通常在1秒内)。