如何在 https 云功能中检查身份验证?
How to check auth in https cloud function?
我想弄清楚是否可以从调用 firebase https 云函数的客户端检查身份验证对象以完成以下任务:
1) 只允许经过验证的电子邮件用户调用 https 端点,否则 return 403.
2) 以某种方式获得对调用函数的客户端的 uid 的访问权限,以便在数据库中设置像 characters/:uid
这样的节点。
这样做的原因是不允许重复字符。我可以在 req.body 中手动传递 uid
,但这意味着任何人都可以 fiddle 并通过发送任何类型的 uid 作为 req.body
有效负载来创建 100 个不同的字符。
我能想到的唯一解决方法是将此逻辑更改为数据库触发器,即客户端写入数据库 void/characters/uid
节点(数据库规则执行整个验证)然后函数监听数据库中的此更改,进程数据并将其推送到 characters/uid
但这意味着需要额外的逻辑,比如在节点完成后删除节点,而且我不确定如何将错误或成功响应发送回客户端,对于 https 函数我们可以 res.send(200)
或发回错误。
如果我理解这一点,我认为这可以通过 firebase 规则来完成。
https://firebase.google.com/docs/reference/security/database/#location
在提供的示例中,规则如下:
".write": "auth.uid === $user"
将只允许具有与出现在路径上的相同 uid 的经过身份验证的用户在那里写入数据。
我不确定是否返回了 403。这意味着您正在使用 firebase 身份验证,即 covered in some depth here,具体取决于您用于身份验证的机制。
我想弄清楚是否可以从调用 firebase https 云函数的客户端检查身份验证对象以完成以下任务:
1) 只允许经过验证的电子邮件用户调用 https 端点,否则 return 403.
2) 以某种方式获得对调用函数的客户端的 uid 的访问权限,以便在数据库中设置像 characters/:uid
这样的节点。
这样做的原因是不允许重复字符。我可以在 req.body 中手动传递 uid
,但这意味着任何人都可以 fiddle 并通过发送任何类型的 uid 作为 req.body
有效负载来创建 100 个不同的字符。
我能想到的唯一解决方法是将此逻辑更改为数据库触发器,即客户端写入数据库 void/characters/uid
节点(数据库规则执行整个验证)然后函数监听数据库中的此更改,进程数据并将其推送到 characters/uid
但这意味着需要额外的逻辑,比如在节点完成后删除节点,而且我不确定如何将错误或成功响应发送回客户端,对于 https 函数我们可以 res.send(200)
或发回错误。
如果我理解这一点,我认为这可以通过 firebase 规则来完成。
https://firebase.google.com/docs/reference/security/database/#location
在提供的示例中,规则如下:
".write": "auth.uid === $user"
将只允许具有与出现在路径上的相同 uid 的经过身份验证的用户在那里写入数据。
我不确定是否返回了 403。这意味着您正在使用 firebase 身份验证,即 covered in some depth here,具体取决于您用于身份验证的机制。