Flutterのアプリ開発で実装したことをブログにしました。誰かのお役に立てれば幸いです。
Firebase側がデフォルトで用意していない認証方法でユーザー登録をする際には、
カスタム認証をすることで、メールアドレス認証などと同じように、
Firebaseでユーザー管理ができるようになります。
認証に何を使うかによって、違うところもあるとは思いますが、
大まかな流れとしては、認証側からuserIdを取得、CloudFunctionsを利用して、
Firebase用のカスタムトークンを取得、カスタムトークンを利用して、
FirebaseAuthでログインする流れになります。
カスタムトークンを作成するため、CloudFunctionsのメソッドを作成します。
また、下の参考コードの場合、サービスアカウントで事前にイニシャライズして、
管理者権限のあるauth
を取得しています。
import * as functions from "firebase-functions";
import { auth } from "../firebase";
export const fetchCustomToken = functions
.region("asia-northeast1")
.https.onRequest(async (request, response) => {
const acountId = request.body.data.accountId;
if (typeof acountId !== "string") {
console.log("acountId is not string");
response.status(404).send({
data: "error : acountId is not string",
});
return;
}
const customToken = await auth.createCustomToken(acountId);
response.status(200).send({
data: { customToken: customToken },
});
});
このコードをアプリ側から呼び出します。
final callable = FirebaseFunctions.instanceFor(region: 'asia-northeast1')
.httpsCallable('fetchCustomToken');
final response = await callable.call({
'accountId': accountId, // ここで別の認証から取得したIDを渡す
});
これで返ってきたresponse
からカスタムトークンを取得できます。
あとは、カスタムトークンを使って、signInWithCustomToken
すれば、
Firebaseのカスタム認証ができます。
final _auth = auth.FirebaseAuth.instance;
final customToken = response.data['customToken'];
final userCredential =
await _auth.signInWithCustomToken(customToken);
https://zenn.dev/yskuue/articles/410e5b787b354a
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More