【Flutter × Cloud Functions】FirebaseAdminSDKを利用して、ユーザー作成してみる
初めに
管理者のみが各ユーザーアカウントを発行できる。という機能を実装する為に、FunctionsでFirebaseAdminSDKを利用し、実装したので備忘録として残します。
今回はアカウント発行のみですが、アカウント削除等もできるので管理者機能を実装するには必須っぽい。下記ドキュメントを参考に、今回のコードを少し変えれば削除等も実装できると思います。
◎Functionsの実装
メールアドレスとパスワードをFlutterから受け取り、firebaseAuthenticationにユーザーを登録、登録後にuidを返す関数を実装していきます。
*プロジェクト作成や細かい部分は省きます。こちらを参考にして頂くと良いかと思います
Functionsをプロジェクトに追加
下記コマンドを実行。今回言語はJavaScriptを選択。
firebase init functions
functions
ディレクトリが生成されます。
Functionsで関数を実装
functions
ディレクトリ内で下記コマンドを実行
yarn add firebase-admin
生成されたfunctionsフォルダ内のindex.js内に下記を実装
今回はfunctions.https.onCallで実装。
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
//ユーザーアカウント作成処理
exports.createUser = functions.https.onCall((data, context) => {
//パラメータを受け取る
const email = data.email;
const password = data.password;
//デフォルトアプリの認証サービスを取得
const defaultAuth = admin.auth();
//アカウント作成処理
return defaultAuth.createUser({
email: email,
password: password,
}).then((userRecord) => {
//uidを返す
return {uid: userRecord.uid};
}).catch((error) => {
//エラー処理
throw new functions.https.HttpsError("unknown", error.message, error);
});
});
関数のデプロイ
下記コマンドを実行
firebase deploy --only functions
◎Flutter側での処理を実装
メールアドレスとパスワードをFunctionsに渡し、Functionsの処理終了後にuidを受け取る処理を実装します。
Functionsを利用する為パッケージをインストール
下記コマンドを実行
flutter pub add cloud_functions
Functionsを呼び出す処理を実装
下記関数を任意の場所で呼び出すことで、実装完了です!
void createUser(String email,String password) async {
try {
//デプロイしたcreateUser関数を実行
final result = await FirebaseFunctions.instance
.httpsCallable('createUser')
.call({'email': email, 'password': password});
//uidが取れる
print(result.data);
} on FirebaseFunctionsException catch (error) {
//エラー処理
print(error.code);
print(error.details);
print(error.message);
}
}
終わりに
Functionsを使わなければ実装できない機能は、ビビっていましたが、臆せず実装していけると実装の幅が広がるなと今回感じました!
(バーと書いたので、何かあったら教えていただけると嬉しいです。)
Twitterでも情報発信しておりますので、ぜひフォローお願い致します!
おまけ HTTPリクエストバージョン
exports.createUser = functions.https.onRequest((request, response) => {
const email = request.query.email;
const password = request.query.password;
const defaultAuth = admin.auth();
defaultAuth.createUser({
email: email,
password: password,
}).then((userRecord) => {
console.log("Successfully created new user:", userRecord.uid);
response.json({uid: userRecord.uid});
}).catch((error) => {
console.log("Error creating new user:", error);
response.json({error: error});
});
});
エラー
デプロイの際に下記のエラー
i functions: cleaning up build files…
Functionsのディレクトリに移動し、 firebase deploy --only functions
を実行
参考
権限
Discussion