我想执行敏感操作,包括行更新电子邮件,密码等。我了解必须对用户进行“最近”身份验证才能执行此类操作。我想确定用户最近是否经过身份验证,然后再允许执行此类操作,而不是从结果错误消息中检测用户身份验证状态。 (这是为了提供更好的用户体验)
我一直在寻找诸如isRecentlyAuthenticated()
之类的方法,但找不到。但是我在lastSignInTime
user
内部发现了metadata
。只有知道“最近”认证在Firebase中的确切含义时,我才能将lastSignInTime
与当前时间进行比较。
请澄清:
(1)是一种isRecentlyAuthenticated()
可用的方法,供我们直接使用
(2)如果不是“最近”,则表示多长时间(1分钟,5分钟,1小时或其他时间)?
答案 0 :(得分:1)
Firebase documentation包含对“最近登录”的引用,例如:
某些对安全敏感的操作(例如删除帐户,设置主电子邮件地址和更改密码)要求用户 最近登录 。< / p>
Firebase在执行对安全敏感的操作时使用ID Tokens。
Firebase ID令牌寿命很短,持续了一个小时;刷新令牌可用于检索新的ID令牌。
正如Frank van Puffelen所指出的那样,在尝试执行这些操作之一时,应该检查错误,而不是检查ID Token
是否过期。
var user = firebase.auth().currentUser;
user.delete().then(function() {
// User deleted.
}).catch(function(error) {
if (error.code === 'auth/requires-recent-login') {
// Require user to sign in again.
}
});
答案 1 :(得分:1)
Firebase身份验证要求您在尝试执行某些敏感操作时最近提供了其凭据。未指定此新近度要求的时间段,它由Firebase身份验证服务强制执行,并且可以随时更改,恕不另行通知。
您应该在代码中处理此问题的方法是,在尝试操作时捕获错误,然后请求用户再次登录。