Firebase 驗證觸發條件
Cloud Run 函式可由與函式位於相同Google Cloud 專案的 Firebase Authentication 事件觸發。包括使用者建立和刪除等事件。舉例來說,您可以向剛在應用程式中建立帳戶的使用者傳送歡迎電子郵件。
事件類型
Firebase 驗證可觸發函式,以回應使用者create
和delete
事件。
事件類型 | 觸發條件 |
---|---|
providers/firebase.auth/eventTypes/user.create |
在建立使用者帳戶時觸發。 |
providers/firebase.auth/eventTypes/user.delete |
在刪除使用者帳戶時觸發。 |
建立使用者
在下列情況下,Firebase 帳戶會觸發 Cloud Run functions 的使用者建立事件:
使用者建立電子郵件帳戶與密碼。
使用者使用聯合識別資訊提供者第一次登入。
開發人員使用 Firebase Admin SDK 建立帳戶。
使用者第一次登入新匿名驗證工作階段。
刪除使用者
您也可以設定在使用者刪除時觸發函式。
事件結構
系統會以 UserRecord
物件的形式提供事件資料。
以下是以密碼為基礎建立帳戶的事件範例:
{ "email": "me@example.com", "metadata": { "createdAt": "2018-10-19T19:29:16Z" }, "uid": "XXXXX" }
只有在使用特定驗證方法時,才會定義這個物件的部分屬性。舉例來說,以密碼為基礎的帳戶事件會定義包含使用者電子郵件地址的 email
屬性。系統一律會定義 uid
屬性 (內含專案專屬的使用者 ID)。
程式碼範例
Node.js
Python
Go
Java
C#
using CloudNative.CloudEvents; using Google.Cloud.Functions.Framework; using Google.Events.Protobuf.Firebase.Auth.V1; using Microsoft.Extensions.Logging; using System.Threading; using System.Threading.Tasks; namespace FirebaseAuth; public class Function : ICloudEventFunction<AuthEventData> { private readonly ILogger _logger; public Function(ILogger<Function> logger) => _logger = logger; public Task HandleAsync(CloudEvent cloudEvent, AuthEventData data, CancellationToken cancellationToken) { _logger.LogInformation("Function triggered by change to user: {uid}", data.Uid); if (data.Metadata is UserMetadata metadata) { _logger.LogInformation("User created at: {created:s}", metadata.CreateTime.ToDateTimeOffset()); } if (!string.IsNullOrEmpty(data.Email)) { _logger.LogInformation("Email: {email}", data.Email); } // In this example, we don't need to perform any asynchronous operations, so the // method doesn't need to be declared async. return Task.CompletedTask; } }
Ruby
PHP
use Google\CloudFunctions\CloudEvent; function firebaseAuth(CloudEvent $cloudevent) { $log = fopen(getenv('LOGGER_OUTPUT') ?: 'php://stderr', 'wb'); $data = $cloudevent->getData(); fwrite( $log, 'Function triggered by change to user: ' . $data['uid'] . PHP_EOL ); fwrite($log, 'Created at: ' . $data['metadata']['createTime'] . PHP_EOL); if (isset($data['email'])) { fwrite($log, 'Email: ' . $data['email'] . PHP_EOL); } }
部署函式
如要部署函式,您需要指定事件類型以及您已針對其設定 Firebase 驗證的專案。在 Google Cloud 控制台中,由於專案與包含函式的專案相同,因此只有「事件類型」單一欄位。
但是在指令列中,您必須使用特定字串指定這兩個參數。下列 gcloud
指令會部署函式,並由使用者 create
事件觸發:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --entry-point ENTRY_POINT \ --trigger-event providers/firebase.auth/eventTypes/user.create \ --trigger-resource YOUR_PROJECT_ID \ --runtime RUNTIME
引數 | 說明 |
---|---|
FUNCTION_NAME |
您要部署的 Cloud Run 函式註冊名稱。
這可以是原始碼中的函式名稱,也可以是任意字串。如果 FUNCTION_NAME 是任意字串,則必須加入 --entry-point 旗標。
|
--entry-point ENTRY_POINT |
原始碼中的函式或類別名稱。除非您未使用 FUNCTION_NAME 在原始碼中指定要在部署期間執行的函式,否則這個欄位為選填。在這種情況下,您必須使用 --entry-point 提供可執行函式的名稱。 |
--trigger-event NAME |
觸發函式的事件類型名稱。 在這種情況下,應為「建立」或「刪除」,如上所述。 |
--trigger-resource NAME |
專案 ID (在本例中為 YOUR_PROJECT_ID ),
該專案包含函式和 Firebase 驗證。
|
--runtime RUNTIME |
您使用的執行階段名稱。如需完整清單,請參閱 gcloud 參考資料。 |