我有一个 v2 firebase 可调用函数:
import { onCall } from "firebase-functions/v2/https";
/// Simple ping to test authentication
exports.ping = onCall(async (req) => {
return { pong: true };
});
因为它是一个可调用函数,所以需要身份验证。我已经验证这是否按预期工作:如果我在没有 Authorization 标头的情况下调用该函数,我会收到 401 Unauthorized。如果我使用有效的授权不记名令牌调用它,我会成功返回
{pong: true}
但是我的授权令牌是否适用于我的应用程序的用户似乎并不重要。我想仅限我的应用程序的注册用户访问此可调用函数。目前,我在
https://console.firebase.google.com/project/XXX/authentication/users
还没有注册用户
尽管如此,只要我有 google 用户的有效令牌,我仍然能够成功调用 ping。调用前后用户控制台都是空的,但是调用成功了。
如何限制 v2 firebase 可调用函数只能由用户控制台中列出的用户使用?
身份验证信息会自动传递到可调用云函数,但“不会”自动强制执行。因此,您的 Cloud Functions 代码仍然需要检查用户是否已登录,如有关编写和部署可调用函数的文档中所述和所示。从那里:
request
参数包含从客户端应用程序传递的数据以及其他上下文(例如身份验证状态)。例如,对于将文本消息保存到实时数据库的可调用函数,数据可以包含消息文本以及 auth 中的身份验证信息:
// Message text passed from the client. const text = request.data.text; // Authentication / user information is automatically added to the request. const uid = request.auth.uid; const name = request.auth.token.name || null; const picture = request.auth.token.picture || null; const email = request.auth.token.email || null;
因此,您需要检查
request.auth
是否具有值,或与您的用例相关的任何其他授权检查。