[React]~Admin画面4:ログイン処理の実装 ~

こんにちは、KOUKIです。Reactで画面開発を行なっています。

前回は、ユーザーの登録処理を実装しました。

今回は、ログイン処理を実装します。

尚、「React, NextJS and Golang: A Rapid Guide – Advanced」コースを参考にしています。解釈は私が勝手に付けているので、本物をみたい場合は受講をお勧めします!

前回

ログイン

以前、ログイン画面を実装しました。

EmailとPasswordをAPI側へ送信して、ログインできるようにしましょう。

データバインディング

Email/Passwordを打ち込んだ時に、情報を内部に保持する仕組みを実装します。

コメントをつけた場所が、変更箇所です。

1では、ステートフックを利用しています。

これを使うと、任意の情報をReactアプリ内に保持しておくことができるようになります。

2では、入力したデータを1で設定したStateに格納しています。

書き方としては、「[XXXX, setXXXX] = useState(デフォルト値)」であり、XXXXはなんでもいいです。格納したいデータに関連する名前をつけましょう。

BaseURLの設定

APIへの送信処理ですが、axiosを使っています。

このaxiosには、baseURLというプロパティを持っており、その名の通り、ベースとなるURLを設定することが可能です。

react-admin/src/index.tsxファイルに、BaseURLの設定を行いましょう。

「http://localhost:8000/api/admin/」までのURLがベースになるので、上記のように設定しました。

前回作成したユーザー登録処理で設定したURLを以下のように変更します。

これならだいぶスッキリしますね。

Submit処理

ログイン情報をAPIへSubmitする処理を実装します。

だいたい登録処理の時と同じです。

ログイン情報をAxiosで送信し、リダイレクトフラグをたて、Home(ダッシュボード)画面へ遷移します。

違いがあるとすれば、「withCredentials」ですね。

API側では、ログイン情報をJWTのTokenに変換し、Cookieに保存します。Cookie情報を扱うために、このプロパティが必要のようです。

また、APIは「localhost:8000」、画面は「localhost:3000」とOriginが異なるため、API側に以下の設定が必要です。

この設定がされていないと、「Access-Control-Allow-Origin」エラーが発生します。

Access to XMLHttpRequest at ‘http://localhost:8000/api/admin/login’ from origin’http://localhost:3000′ has been blocked by CORS policy:Response to preflight request doesn’t pass access control check:The value of the ‘Access-Control-Allow-Origin’ header in the response must not be the wildcard ‘*’when the request’s credentials mode is ‘include’. The credentials mode of requests initiatedby the XMLHttpRequest is controlled by the withCredentials attribute.

もし、ログインがうまくいかない場合は、設定に漏れがないか確認してください。

withCredentialsの共通化

前述の通り、Cookieを利用した認証機能をAPI側で実装しているため、axiosリクエスト全てにwithCredentialsを付与しなければなりません。

これは大変煩わしいので、withCredentialsプロパティを常にtrueにする設定をindex.tsxに入れたいと思います。

この変更に伴い、先ほど実装したSubmit処理のPOSTリクエストも以下のように変更します。

検証

実際にログインできるか確認してみましょう。

前回の記事を参考に、ユーザー情報を登録してからログインしてみてください。

ログインURLは、「http://localhost:3000/login」です。

私は、「test@omega.com」Emailを持つユーザーを作成してあるので、それでログインします。

OKですね。

次回

次回は、ログイン・ログアウト機能を実装をしましょう。

Reactまとめ

参考書籍


ソースコード

ここまで実装したソースコードを下記に記載します。

Register.tsx

index.tsx

Login.tsx

コメントを残す