Monaca Docs
  • Monaca とは
  • 最初のアプリを作る
  • アプリをテストする
  • Monaca リリース情報
    • iOS プライバシーマニフェスト対応
    • 「ニフクラ mobile backend」終了に関するお知らせ
    • プラグイン uses-permission タグの重複修正機能
    • Cordova 12 の変更点
    • iOSストア版Monaca デバッガー配信停止と代替機能のご案内
    • iOS App Store への送信エラー (ITMS-90165)
    • cordova-custom-configのビルドエラー
    • Cordova 11 の変更点
    • Cordova 10 の変更点
    • Cordova 9.0 の変更点
    • 利用規約の変更
    • 新しい Monaca CLI と Localkit
    • CordovaからCapacitorへの移行
  • Monacaガイド
    • Monaca での開発の概要
    • Monaca クラウド IDE
      • 概要
      • Monaca クラウド IDE の機能
      • ターミナル機能
      • エディターのショートカット一覧
      • プロジェクトの構成
        • ファイル・フォルダー構成
        • JS/CSS コンポーネント
        • Cordova プラグイン
        • ユーザー Cordova プラグイン
      • バージョン管理
        • 概要
        • GitHub との連携
        • Git SSH との連携
      • Monaca CI
        • 概要
        • アプリ配信 / 配布サービス (デプロイサービス)
        • Appetize.ioへの配信
        • DeployGateへの配信
        • Firebase への配信
      • ビルド
        • iOS アプリのビルド
          • iOS アプリのビルド
          • Monaca と Xcode 間でのビルド設定の再利用
        • Android アプリのビルド
        • Windows アプリのビルド
        • Electron アプリのビルド
          • Windows アプリのビルド
        • PWA アプリのビルド
        • ビルド環境の設定
        • ビルド履歴一覧
        • 一般的なビルドとアップロードエラー
      • 配布方法
        • App Store での配布
          • App Store Connect ガイド
          • iOS アプリ アップロード機能
        • Google Play での配布
        • 公式ストア経由以外での配布
      • パッケージダウンロード機能
      • チュートリアル
    • Monaca Localkit
      • 概要
      • ペアリングとデバッグ
      • リモートビルドと配布申請
      • トラブルシューティング
        • インストール ( Windows の場合 )
        • インストール ( Mac OS X の場合 )
        • アンインストール時 ( Windows の場合 )
        • 不完全なファイル・フォルダー構成
        • プレビューウィンドウが更新されない
        • Error while installing
        • nodeのインストールが必要です
      • チュートリアル
    • Monaca CLI
      • 概要
      • Monaca CLI コマンド
      • ペアリングとデバッグ
      • リモートビルドと配布申請
      • トラブルシューティング ガイド
      • チュートリアル
    • Monaca デバッガー
      • 機能の概要
      • インストール方法
        • Android 向けの Monaca デバッガー
        • iOS 向け Monaca デバッガー
        • Android エミュレーター向け Monaca デバッガー
      • 使用例
      • iOS カスタムビルド版デバッガー
      • iOS シミュレータービルド
      • トラブルシューティング ガイド
      • チュートリアル
    • チームダッシュボード
    • クイックビューア
    • 他のプラットフォームからの移行
      • 移行時の確認ポイント
      • クラウドIDE プレビュー機能の設定
      • Angular からの移行
      • Ionic からの移行
      • React からの移行
      • Vue からの移行
      • Telerik からの移行
  • 🛠️アプリビルド
    • iOS ビルド
      • 秘密鍵とCSRの作成
      • 証明書の作成
      • プロビジョニング・プロファイルの更新
  • チュートリアル
    • Monaca クラウド IDE チュートリアル
      • パート 1 : プロジェクトの作成
      • パート 2 : Monaca クラウド IDE と Monaca デバッガーとの連携
      • パート 3 : Monaca アプリのビルド
      • パート 4 : Monaca アプリの配布申請
    • Monaca Localkit チュートリアル
      • パート 1 : プロジェクトの作成
      • パート 2 : Monaca Localkit と Monaca デバッガーとの連携
      • パート 3 : Monaca アプリのビルド
      • パート 4 : Monaca アプリの配布申請
    • Monaca CLI チュートリアル
      • パート 1 : プロジェクトの作成
      • パート 2 : Monaca CLI と Monaca デバッガーとの連携
      • パート 3 : Monaca アプリのビルド
      • パート 4 : Monaca アプリの配布申請
    • Electron アプリ開発
      • NPMパッケージの利用方法
      • Web APIの利用方法
    • バーコードスキャナープラグイン
    • Cordova Sqlite Storage プラグイン
    • Cordova Google Analytics プラグイン
    • Cordova Firebase プラグイン
    • Cordova In-app Purchase プラグイン
    • Cordova AppVersion プラグイン
    • Cordova Ionic Keyboard プラグイン
    • Cordova Social Sharing プラグイン
    • Phonegap Push プラグイン
  • APIの解説
    • Monaca API
      • Monaca クラウド & リモートビルド API
      • ユーティリティ
    • 基本プラグイン
      • Cordova 12.0
        • Battery プラグイン
        • Camera プラグイン
        • Device プラグイン
        • Device Motion プラグイン
        • Device Orientation プラグイン
        • Dialog プラグイン
        • File プラグイン
        • Geolocation プラグイン
        • InAppBrowser プラグイン
        • Media プラグイン
        • Media Capture プラグイン
        • Network Information プラグイン
        • Vibration プラグイン
        • StatusBar プラグイン
      • Cordova 11.0
        • Battery プラグイン
        • Camera プラグイン
        • Device プラグイン
        • Device Motion プラグイン
        • Device Orientation プラグイン
        • Dialog プラグイン
        • File プラグイン
        • Geolocation プラグイン
        • InAppBrowser プラグイン
        • Media プラグイン
        • Media Capture プラグイン
        • Network Information プラグイン
        • Splashscreen プラグイン
        • Vibration プラグイン
        • StatusBar プラグイン
      • Cordova 10.0
        • Battery プラグイン
        • Camera プラグイン
        • Device プラグイン
        • Device Motion プラグイン
        • Device Orientation プラグイン
        • Dialog プラグイン
        • File プラグイン
        • Geolocation プラグイン
        • InAppBrowser プラグイン
        • Media プラグイン
        • Media Capture プラグイン
        • Network Information プラグイン
        • Splashscreen プラグイン
        • Vibration プラグイン
        • StatusBar プラグイン
        • Whitelist プラグイン ( Android 専用 )
      • Cordova 9.0
        • バッテリー情報の取得 プラグイン
        • カメラ操作 プラグイン
        • 住所録の取得 プラグイン
        • 端末情報の取得 プラグイン
        • 端末のモーション検知 プラグイン
        • 端末のオリエンテーション検知 プラグイン
        • ダイアログの制御 プラグイン
        • ファイル操作 プラグイン
        • ファイル転送 プラグイン
        • 位置情報の取得 プラグイン
        • 表記の国際化対応 プラグイン
        • InAppBrowser プラグイン
        • メディア操作 プラグイン
        • メディアキャプチャー プラグイン
        • ネットワーク情報の取得 プラグイン
        • スプラッシュスクリーンの制御 プラグイン
        • バイブレーションの制御 プラグイン
        • ステータスバーの制御 プラグイン
        • ホワイトリストへの登録 プラグイン ( Android 専用 )
    • サードパーティー製プラグイン
      • AdvancedHTTPプラグイン
      • PhoneGap BarcodeScanner
      • Custom Config
      • Datepicker
      • Share ( Android 向け )
      • WebIntent ( Android 向け )
    • Monaca 提供プラグイン
      • アプリロジック暗号化 (Encrypt プラグイン)
      • In-App アップデーター (In-App Updater)
      • セキュア ストレージ
      • NFC リーダー
      • バーコードスキャナー
      • Androidビルドメモリサイズ設定
    • 外部サービス連携
      • Repro
      • AppsFlyer
    • 設定ファイル
      • Android
        • Android の設定
        • config.xml
        • AndroidManifest.xml
      • iOS
        • iOS の設定
        • config.xml
        • MonacaApp-info.plist
  • サンプル & Tips
    • Firestoreを利用する
    • サンプルアプリ
      • Twitter アプリ
      • Facebook アプリ
      • 広告 アプリ (AdMob)
      • Hello World アプリ
      • メモ帳アプリ
      • ブロック崩しゲーム
      • Flickrアプリ
      • TODO管理 アプリ
      • 電車図鑑アプリ
      • 時計アプリ
      • 誕生年の計算アプリ
      • おみくじ占いアプリ
      • RSS リーダーアプリ
    • 開発 Tips
      • 音楽の再生方法
      • スプラッシュ画像の制御方法
      • データベースの利用方法
  • Webpack5への更新
  • 機能
    • SNS 認証
    • プッシュ通知
    • データベース
  • 外部サービス連携ガイド
    • Firebase
      • アプリの登録と設定ファイルの取得
  • 移行ガイド
    • ニフクラ mobile backend
      • プッシュ通知
        • Firebaseサービスの設定
        • ソースコードの移行
      • データストア
        • ソースコードの移行
        • データの移行
        • データ移行スクリプト実行手順
      • 会員管理・認証
        • 会員管理 データの移行
        • Firebase Authentication パスワード再設定サンプル
        • Firebase Authenticationを使用したユーザー名認証の方法
      • スクリプト
        • Firebase Functions開発環境の作成
        • サンプル共通項目
        • サンプル1(GETサンプル)
        • サンプル2(POSTサンプル)
        • サンプル3(DELETEサンプル)
        • エミュレータでのテスト
      • ファイルストア
        • ファイルアップロード
        • ファイル検索
        • ファイル一覧表示
        • ファイル削除
  • FAQ
    • 概要
    • IDE
    • ビルド
    • リリース
    • 契約プラン
    • アプリケーション
    • 使用方法
    • Freeプラン
    • デバッガー
  • 対応環境
  • トラブルシューティング
    • プレビューログがリロードを繰り返す (Vue packages version mismatch error)
  • Monaca製品サイト
  • 運営会社
  • English
GitBook提供
このページ内
  • データ移行
  • インポート実行
  • importUser関数の解説
  • 初期パスワードの登録
  • ユーザー名を使った認証サンプルアプリ
  • ユーザー名、パスワードでアプリにログインする
  • パスワード変更

役に立ちましたか?

  1. 移行ガイド
  2. ニフクラ mobile backend
  3. 会員管理・認証

Firebase Authenticationを使用したユーザー名認証の方法

前へFirebase Authentication パスワード再設定サンプル次へスクリプト

最終更新 1 年前

役に立ちましたか?

本ドキュメントでは、Firebase Authenticationを利用してユーザー名での認証を実装する方法を紹介します。Firebase Authenticationはメールアドレスを使用した認証を直接サポートしていますが、ユーザー名での直接的な認証はサポートしていません。ここでは、ユーザー名をメールアドレス形式で利用するアプローチを取り、具体的にはサンプルアプリでは、電話番号をユーザー名として使用するケースを例に説明します。

また、今回のサンプルは、下記の運用を前提とします。

  • NCMB会員管理システムにて電話番号が保持されていること。

  • ユーザー名として電話番号を使用すること。

  • データ移行時には初期パスワードを設定すること。

  • ユーザーがログイン後にパスワードを変更可能であること。

本手法の特徴は、メールアドレスの検証を行わないことです。

このアプローチの欠点は、メールアドレスをダミーで使用するため、ユーザーがパスワードを忘れた場合にパスワード再設定機能を利用できないことにあります。そのため、パスワードの再設定は管理者への依頼を想定した運用が必要です。

本手法では、ダミーメールアドレスの使用により、通常のパスワード再設定メカニズムを利用できません。パスワード忘れの場合は管理者への連絡が必要となります。

本ドキュメントで扱うコードのオリジナルプロジェクトは、GitHubリポジトリにて公開しています。

データ移行

インポート実行

npm run import-name

importUser関数の解説

importWithUserName.js では、NCMB の会員管理機能に登録されたユーザー情報と、Firebase Authenticationのユーザー情報を紐づける処理を行います。

ユーザー名のFirebase対応形式への変換

NCMBで管理されているユーザー名(ここでは電話番号を例としています)をFirebase Authenticationで利用可能な形式に変換するために、次の手順を踏みます。

  • ユーザー名(電話番号)に対して、ダミードメイン(@example.com)を追加します。

  • この変換により、ユーザー名がメールアドレス形式になります。

変換の必要性

Firebase Authenticationでは、ユーザーを識別するためにメールアドレス形式のデータが必要です。そのため、元々メールアドレス形式でないユーザー名(この場合は電話番号)をFirebaseで扱うためには、メールアドレス形式に変換する必要があります。この変換を行わないと、Firebase側でエラーが発生し、ユーザー情報の登録や認証が正しく行えません。

const phoneNumber = formatPhoneNumber(user.phone_number);
const dummyEmail = `${phoneNumber}@example.com`;

try {
    const results = await getAuth()
        .importUsers(
            [
                {
                    uid: user.objectId,                                 // NCMBのユーザーIDをFirebaseのUIDにマッピングします。
                    displayName: formatPhoneNumber(user.phone_number),  // NCMBの電話番号を表示名(displayName)にマッピングします。
                    email: dummyEmail,                                  // NCMBの電話番号をFirebaseのメールアドレスにマッピングします。
                    emailVerified: true,                                // メールアドレスの確認状態。メールアドレスの検証を行わないため、初期状態を確認済(true)としています。
                },
            ]
        );

今回のサンプルではメールアドレスの検証を行わないので emailVerified は true (検証済み)に設定します。

初期パスワードの登録

移行時に初期パスワードを登録します。 まずメールアドレスを使って、Authenticationから該当データを取得します。

const userRecord = await admin.auth().getUserByEmail(dummyEmail);
console.log("UID:", userRecord.uid);

次に、取得したユーザーデータのuid とupdateUser 関数を使ってパスワードを変更します。 このサンプルでは test123 という固定値を使っていますが、ユーザーごとに十分な長さを持つランダム文字列を使うようにしてください。

await getAuth().updateUser(userRecord.uid, {
    password: 'test123',
});

この updateUser 関数は初期パスワードの登録以外にも、ユーザー管理者がパスワード変更をするケースなどにも利用できます。

ユーザー名を使った認証サンプルアプリ

本項では、移行したユーザー名と初期パスワードを使ってログインを行うサンプルアプリを解説します。前回紹介したサンプルに、下記機能を追加しました。

  • ユーザー名(電話番号)、パスワードでアプリにログインする

  • ログイン状態で、パスワード変更を行う

ユーザー名、パスワードでアプリにログインする

下記のコードは「ユーザー名でログイン」ボタンがタップされた時に実行されます。 AuthenticationのsignInWithEmailAndPassword 関数を使いますが、画面から入力されたユーザー名(電話番号)をメールアドレス形式に加工して利用します。 「@example.com」部分は移行スクリプトで指定したドメインと同じものを使います。 パスワードには初期パスワード「test123」を入力します。

const onClickLoginWithUserName = () => {
    const userName = document.getElementById("userName").value;
    const password = document.getElementById("passwordForUserName").value;

    // emailは画面上では利用しないが、ログインで利用するために userName + 任意のドメイン形式で保存する。
    // 「example.com」部分はアプリケーションに応じて変更する。ユーザーデータの移行は https://github.com/monaca-samples/authentication-migration の importWithUserName.jsを参照。
    const email = `${userName}@example.com`;
    signInWithEmailAndPassword(auth, email, password)
        .then((userCredential) => {
            // ログイン成功
            alert("ログインしました");
            const user = userCredential.user;
            console.log(user);
        })
        .catch((error) => {
            alert("ログインエラーです");
            console.error(error);
        });
};

パスワード変更

初期パスワードを使い続けるのはセキュリティ上よくないので、ログインしたユーザー自身で変更する機能が必要です。 前項で紹介した「パスワード再設定」機能はパスワードを忘れてしまってログインできないケースを想定していますが、パスワード変更機能はログイン後にパスワードを変更するケースを想定しています。 下記のコードはログイン後に表示される「パスワード変更」ボタンがタップされた時に実行されます。 AuthenticationのupdatePassword 関数にログインユーザー、新しいパスワードを指定して実行します。

const onClickPasswordChange = () => {
    const newPassword = document.getElementById("newPassword").value;
    updatePassword(auth.currentUser, newPassword).then(() => {
        alert("パスワードを変更しました");
    }).catch((error) => {
        console.error(error);
    });
};

「」で解説したスクリプトを利用します。Firebaseのセットアップなどの詳細はそちらを参照ください。 今回は、「importWithUserName.js」を利用します。

インポートは、次のコマンドで実行します。登録されたデータの確認などはを参照してください。

会員管理 データの移行
前回の記事
https://github.com/monaca-samples/authentication-migrationgithub.com
https://github.com/monaca-samples/authentication-basicgithub.com