问题描述
我正在使用 Firebase 构建无服务器应用:Firestore 和云功能。我一直在努力解决的一件事是如何验证用户是否启用了 2FA 以允许访问某些功能。 已注册 Google Identity Platform 以允许 2FA,但很遗憾我找不到强制 2FA 的选项。
我的安全规则要求是:登录、验证电子邮件、使用 2FA 进行身份验证。
云 Firestore 中的当前安全规则:
request.auth != null && request.auth.token.email_verified
据我搜索 request.auth.token.phone_number
可以检查,但只检查用户是否注册了电话号码,而不检查他们是否有 2FA 登录?
解决方法
Google 去年在 Google Cloud Identity Platform 为 March 项目添加了多因素身份验证支持。例如,要对用户进行身份验证,您可以构建代码以包含以下步骤:
- 重新验证用户;
- 要求用户输入他们的电话号码;
- 初始化:reCAPTCHA 验证器;
- 为用户获取多因素会话;
- 初始化:带有用户电话号码和多因素会话的 PhoneInfoOptions 对象;
- 向用户的手机发送验证消息;
- 如果请求失败,重置 reCAPTCHA;
- 要求用户验证短信代码;
- 初始化:一个 MultiFactorAssertion 对象;
- 完成注册;
如果您有兴趣阅读更多内容,可以在 Firebase documentation 页面上找到下面的代码片段。
Option Explicit
Public Sub test2()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets 'loop all worksheets
Dim HeaderName As String
HeaderName = Join(Array("ID","GENDER","REVENUE"))
Dim LastUsedCell As Range 'find last used cell of ALL columns
Set LastUsedCell = Nothing 'initialize (because inside loop)
Set LastUsedCell = ws.UsedRange.Find("*",xlByRows,xlPrevious)
If Not LastUsedCell Is Nothing Then 'prevent error on empty sheets
Dim HeaderRow As Range
Set HeaderRow = ws.Range(ws.Cells(1,1),ws.Cells(1,ws.Cells.Columns.Count).End(xlToLeft))
Dim Header As Variant
For Each Header In HeaderRow
If InStr(1,HeaderName,Header.Value,vbTextCompare) = 0 Then
ws.Range(ws.Cells(2,Header.Column),ws.Cells(LastUsedCell.Row,Header.Column)).Value2 = "Customer"
End If
Next Header
End If
Next ws
End Sub
,
在将这个问题提交给 google 群组寻求支持后,我找到了答案:
if request.auth.token.firebase.get('sign_in_second_factor',null) == 'phone'
&& 'second_factor_identifier' in request.auth.token.firebase;
如果用户有手机作为 2FA,这将允许访问。
您可以在 google 群组中查看 Sam 的原文:https://groups.google.com/g/firebase-talk/c/7EZfxETa_jk/m/4e0FRCpWAgAJ