【问题标题】:Firebase re-authentication required需要 Firebase 重新身份验证
【发布时间】:2015-10-10 05:32:48
【问题描述】:

我们正在开发一个 iOS 应用,该应用使用 Google 向 Firebase 进行身份验证。根据https://www.firebase.com/docs/ios/guide/user-auth.html#section-login Firebase 的说法,身份验证令牌每 24 小时过期一次。 我们想知道是否需要考虑以下情况:

  1. 用户通过 Google 和 Firebase 进行身份验证
  2. 我们的应用获得了一个在 24 小时内过期的 Firebase 身份验证令牌
  3. 用户关闭我们的 iOS 应用
  4. Firebase 身份验证令牌到期前 1 分钟,用户重新打开应用
  5. 一分钟后,我们向 Firebase 发出请求。身份验证令牌已过期。

看来我们必须通过观察每个https://www.firebase.com/docs/ios/guide/user-auth.html#section-monitoring-authentication 的身份验证更改来使用 Firebase 重新进行身份验证。但是我们是否必须从上面的 #5 重新向 Firebase 发出相同的请求? 此外,我们似乎可以在 cancelBlock 中重新进行身份验证:

[ref observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
    NSLog(@"%@", snapshot.value);
} withCancelBlock:^(NSError *error) {
    NSLog(@"%@", error.description);
    // reauthenticate and then re-issue request?
}];

这并不理想,因为我们必须在我们提出请求的任何地方编写此代码。

处理这种情况的最佳做法是什么? Firebase 是否会在身份验证令牌即将到期时自动刷新它?

【问题讨论】:

  • 注意:默认为 24​​ 小时,但您可以在 Session Length 下的 Login & Authentication 选项卡下更改此设置
  • 没错。但是,无论时间间隔如何,问题是是否会有 google oauth 令牌有效但 firebase 令牌过期的时间点。我们的 30 秒 firebase 超时实验似乎表明我们必须手动刷新 firebase 身份验证令牌
  • 您必须手动刷新身份验证令牌。您可以监视.info/authenticated 以检测更改状态——比取消回调更好的答案。
  • 我也有同样的问题。每次用户恢复应用程序时,我都会检查身份验证状态,如果已过期则重新验证。但是,有时,用户仍然会因为过期的身份验证问题而被轰炸。
  • @sjm 你如何改变长度,我在控制台中看不到它 - 不确定事情是否改变了?

标签: ios firebase firebase-authentication


【解决方案1】:

显然,问题是关于旧版本的 Firebase 及其 SDK。当前版本的 Firebase (3.X) 让您更轻松,因为 Firebase 会记住用户上次登录您的应用的方式。

所以你应该简单地调用 FIRApp.configure() 一如既往,例如在您的application: didFinishLaunchingWithOptions launchOptions: 中,然后在您的应用启动时添加一个状态侦听器,例如

FIRAuth.auth()?.addStateDidChangeListener() { (auth, firUser) in 
// do something with firUser, e.g. update UI
}

然后,每当您的用户发生变化并且 Firebase 在后台处理令牌时,Firebase 将在您的应用程序启动时自动调用侦听器,即您不必处理过期的令牌。 (如果你使用Custom Auth System 可能会更复杂)。

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 1970-01-01
    • 2016-03-01
    • 2016-01-09
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2019-08-11
    • 2019-08-06
    相关资源
    最近更新 更多