我正在通过以下方式使用从firebase auth获得的访问令牌访问后端:
这是有效的,只要访问令牌是陈旧的即可。 如果应用程序保持打开状态并且可以捕获由于令牌过期而导致的403(我可以仅重用当前用户对象以获得新令牌),则这也可能会起作用。但是,如果令牌在关闭应用程序时过期,那么再次打开令牌(不再有用户对象)会导致用户重新输入其凭据,是吗?
我想到的一种方法是使用自定义令牌功能: 登录后,我可以将刷新令牌发送给客户端,然后刷新令牌将其存储并用于(自动)登录而不是使用凭据。 但是“习俗”一词使我认为我以某种方式走错了路。当然,必须有一种使用预期功能的简单方法。
有人可以帮我吗?
问候,
Codehai
答案 0 :(得分:0)
使用此侦听器会自动刷新令牌,在编辑器中将无法使用。
要使我的代码正常工作,我必须在所有Firebase任务上添加TaskScheduler.FromCurrentSynchronizationContext()。
void Start()
{
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.IdTokenChanged += IdTokenChanged;
}
void IdTokenChanged(object sender, System.EventArgs eventArgs)
{
Firebase.Auth.FirebaseAuth senderAuth = sender as Firebase.Auth.FirebaseAuth;
if (senderAuth == auth && senderAuth.CurrentUser != null && !fetchingToken)
{
fetchingToken = true;
senderAuth.CurrentUser.TokenAsync(true).ContinueWith(
task =>
{
if (task.IsCanceled)
{
Debug.Log("canceled");
}
if (task.IsFaulted)
{
foreach (var errors in task.Exception.InnerExceptions)
{
Debug.Log(errors.InnerException.Message);
}
}
Debug.Log("New Token: " + task.Result);
// save task.Result
fetchingToken = false;
}, TaskScheduler.FromCurrentSynchronizationContext());
}
}
private void OnDestroy()
{
auth.IdTokenChanged -= IdTokenChanged;
}