Firebaseに作成したアプリにメールアドレスとパスワードでサインアップするReactのコードを解説

会員登録 プログラミング

Firebaseに作成したReactのアプリにメールアドレスとパスワードでサインアップする処理にフォーカスを当てて解説します。

※ ソースはこちら:Github

※ アプリはこちら:「Firebaseに認証するだけのアプリ」

※ パッケージのバージョン:”firebase”: “^9.22.1″、”react”: “^18.2.0″ (詳細はGithubのpackage.jsonを参照してください。)

※ Firebaseの認証周り全般の解説はこちらを参照してください。

サインアップ画面の処理

Firebaseのアプリにサインアップする画面

当該ページ(SignUpコンポーネント)を表示するのは、URLに”~/signup”を指定するか、Login画面から「ユーザー登録はこちらから」をクリックした場合になります。

SignUpコンポーネント

SignUp.js

import { mailRegistration } from "../service/firebase/registration";
import { useAuthContext } from "../context/AuthContext";
import { useNavigate } from "react-router-dom";
import Title from "./Title";

import { Button, Input } from "@mui/material";
import AppRegistrationIcon from "@mui/icons-material/AppRegistration";
import SendIcon from "@mui/icons-material/Send";


const SignUp = () => {
  const { user } = useAuthContext();
  const navigate = useNavigate();
  const handleSubmit = (e) => {  // こちらの関数を下記に解説しています。
    e.preventDefault();
    const [email, password] = e.target.elements;
    mailRegistration(email.value, password.value).then(
      (ret) => ret && navigate("/")
    );
  };

  return (
    <div>
      <Title />
      <h2>ユーザー登録 {user && user.email}</h2>
      <form onSubmit={handleSubmit}>
        <div>
          <label htmlFor="email">メールアドレス: </label>
          <Input
                  id="email"
                  name="email"
                  placeholder="email"
                  type="email"
          />
        </div>
        <div>
          <label htmlFor="password">パスワード: </label>
          <Input
                  id="password"
                  name="password"
                  placeholder="password"
                  type="password"
          />
          <p>パスワードは6文字以上にしてください。</p>
        </div>
        <div>
          <Button variant="outlined" startIcon={<AppRegistrationIcon />} type="submit">
            登録
          </Button> // こちらの<Button>コンポーネントを下記に解説しています。
        </div>
      </form>
      <Button
        variant="outlined"
        onClick={() => navigate("/login")}
        style={{ margin: "0 20px" }}
        endIcon={<SendIcon />}
      >
        Login画面へ
      </Button>
    </div>
  );
};

export default SignUp;

“<Button ~~~ type=”submit”>登録</Button>”

“<Button ~~~ type=”submit”>登録</Button>”がメールアドレスとパスワードを登録するボタン。

ボタンをクリックすると<form onSubmit={handleSubmit}>が発火し、handleSubmitがコールされます。

神谷
神谷

<Button>コンポーネントは、MUIのコンポーネントです。

MUIについては、以下の記事で解説しています。

const handleSubmit ~

handleSubmitの「e.preventDefault()」は、ページがリロードされないようにするため必要。

リロードされると入力情報がなくなってしまいます。

そして、Firebaseのアプリにログインするために、入力されたメールアドレスとパスワードを入力として、mailRegistration()をコールします。

mailRegistration()は、promisを返しますので、thenで受けます。

登録が成功すれば、ルート(ホーム)画面を表示します。

mailRegistration() (ユーザーを登録するための関数)

registration.js

import { createUserWithEmailAndPassword, sendEmailVerification } from "firebase/auth";
import { auth } from "./firebase"
import { issueMsg } from "../common/issueMsg";

const mailRegistration = async (email, password) => {
  try {
    await createUserWithEmailAndPassword(  // この関数を下記に解説しています。
      auth,
      email,
      password
    );
    await sendEmailVerification(auth.currentUser); // この関数を下記に解説しています。
    issueMsg("認証のためのメールを送信しました。メールのURLをクリックして当該メールを認証してください。");
    return true;
  } catch (error) {
    if (error.code === 'auth/invalid-email') {
      issueMsg("正しいメールアドレスの形式で入力してください。");
    } else if (error.code === 'auth/weak-password') {
      issueMsg("パスワードは6文字以上を設定する必要があります。");
    } else if (error.code === 'auth/email-already-in-use') {
      issueMsg("そのメールアドレスは登録済みです。");
    } else {
      issueMsg(`登録時にエラーが発生しました。${error.code}`);
    }
    console.error(error);
    return false;
  }
}

export { mailRegistration } ;

createUserWithEmailAndPassword()

createUserWithEmailAndPassword()はFirebaseの関数。

createUserWithEmailAndPassword()に、メールアドレスとパスワードを指定すれば、ユーザー登録ができます。(authはFirebaseの情報です。詳細は、こちらの記事を参照してください。)

sendEmailVerification()

そして、ユーザー登録が成功したら、Firebaseの関数のsendEmailVerification()をコールして、登録したメールアドレスに認証のためのメールを送信します。

認証メールの内容

このメールのリンクをクリックすると、

メール認証完了のウインドウ

メール認証が終了したウインドウが出力し、正式にメールアドレスとパスワードが登録されます。

Firebaseのアプリに登録したユーザーを確認する

Firebase ConsoleのAuthenticationから登録できたかを確認できます。

catch 以降

createUserWithEmailAndPassword(),sendEmailVerification()がエラーになると、catch以降に正業が渡ります。

エラーコードを解析して、エラーメッセージを出力しています。

どんなエラーコードがあるかはこちらで確認することができます。

最後に

以下が、当該Reactのプロジェクトのsrc配下のファイル構造です。

SRC
│  App.css
│  App.js
│  App.test.js
│  index.css
│  index.js
│  reportWebVitals.js
│  service-worker.js
│  serviceWorkerRegistration.js
│  setupTests.js
│
├─components
│  │  Home.js
│  │  HomeChild.js
│  │  Login.js
│  │  PrivateRoute.js
│  │  PublicRoute.js
│  │  SignUp.js
│  │  Title.js
│  │
│  └─styles
│          portal.css
│
├─context
│      AuthContext.js
│
└─service
    ├─authenticationProcess
    │      changePassword.js
    │      delUser.js
    │
    ├─common
    │      issueMsg.js
    │
    └─firebase
            firebase.js
            getCredential.js
            loginFirebase.js
            registration.js
            sendEmailLink.js
            submitPasswordResetEmail.js

この記事では、

  • SignUp.js
  • registration.js

の解説をしました。

Firebaseに作成したアプリにメールアドレスとパスワードでサインアップする設定はこちらを参照してください。

このブログに掲載されているコードは、著作権者(私)に帰属します。コードを自由に使用、複製、改変、配布、販売、サブライセンスできます。また、コードを使用した結果、何らかの損害が発生した場合でも、著作権者は一切責任を負いません。

タイトルとURLをコピーしました