【React】Amplify CLI で Cognito を使った認証画面を実装する
React + amplify cli でログイン認証させてみます ❗
前提
- AWS CLI が導入済み
- Node.js が導入済み
では 作っていきましょう 👻
APP を新規に作成します
この辺はコマンドだけでさらっと流します。
詳細はこのあたりを参考にしてください
$ npx create-react-app react-amplify-cognito
# react-amplify-cognito はApp名なのでお好みの名前で❗
# カレントディレクトリ移動
$ cd react-amplify-cognito
Amplify CLI をインストールする
下記のコマンドで(グローバルに)インストールします。
詳細はこのあたりを御覧ください
# インストール
$ npm install -g @aws-amplify/cli
# 念の為ターミナル再起動
$ exec $SHELL -l'
Amplify を初期化する
下記のコマンドで初期化します
$ amplify init
# 以下対話
# プロジェクト名は?と問われたので、何もせずEnter❗
? Enter a name for the project (reactamplifycognito)
# 設定がずらずらでたあとに、これで良い?と確認してくるので、何もせずEnter❗
? Initialize the project with the above configuration? (Y/n)
# 認証方法を聞かれるので、プロファイルを選択する
? Select the authentication method you want to use: (Use arrow keys)
❯ AWS profile
AWS access keys
# 設定済みのプロファイル一覧がでてくるので、そこから対応のプロファイルを選ぶ。
# →だいたいの人はデフォルトでいいと思うけれども、複数プロファイル作っている人は注意❗
? Please choose the profile you want to use (Use arrow keys)
❯ default
# しばらく待つと下記な表示が出て、初期化が完了する
Your project has been successfully initialized and connected to the cloud!
AWS の Amplify のコンソールに行くと初期化された App を確認することができる。
Cognito による認証機能の追加
下記のコマンドで App に認証のリソースを追加します
$ amplify add auth
# 以下対話
# どれ使う?と問われるのでデフォルトを選択します
Do you want to use the default authentication and security configuration? (Use arrow keys)
❯ Default configuration
Default configuration with Social Provider (Federation)
Manual configuration
I want to learn more.
# ログインするときにどれ使う?と問われるので、今回はユーザー名でいきます
How do you want users to be able to sign in? (Use arrow keys)
❯ Username
Email
Phone Number
Email or Phone Number
I want to learn more.
# 詳細設定刷る?と問われるので今回は No で❗
Do you want to configure advanced settings? (Use arrow keys)
❯ No, I am done.
Yes, I want to make some additional changes.
# 下記が表示されてリソースの追加完了
Successfully added auth resource reactamplifycognito511115a7 locally
リソースをデプロイする
下記のコマンドでデプロイします
$ amplify push
# 下記デプロイするよーと言ってくるので、Enter
✔ Successfully pulled backend environment dev from the cloud.
Current Environment: dev
| Category | Resource name | Operation | Provider plugin |
| -------- | --------------------------- | --------- | ----------------- |
| Auth | reactamplifycognito511115a7 | Create | awscloudformation |
? Are you sure you want to continue? (Y/n)
完了後,cognito のコンソールでユーザープールを確認すると下記のように追加されいます
さて、これでインフラは揃いましたので、client 側にログイン画面を仕込んでいきます
Amplify Librar をインストールします
これは Amplify 向けの SDK で、下記のコマンドでインストールします。
$ npm install aws-amplify @aws-amplify/ui-react
ログイン画面を仕込む
一旦下記コマンドでアプリを実行します
$ npm run start
React の初期ページ(Edit src/App.js and save to reload.
)が表示されることを確認します。
このページを、ログインしないと見れないように加工してみます。
src/App.js
を開いて下記のように加工します。
手を加えた行にコメントを残しました!といっても 6 行です(笑)
import logo from "./logo.svg";
import "./App.css";
import Amplify from "aws-amplify"; // 追加
import { withAuthenticator, AmplifySignOut } from "@aws-amplify/ui-react"; // 追加
import awsconfig from "./aws-exports"; // 追加
Amplify.configure(awsconfig); // 追加
function App() {
return (
<div className="App">
<AmplifySignOut /> {/* サインアウトボタン 追加 */}
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default withAuthenticator(App); // 修正
再度アクセスしてみます
組み込みログインページが表示されました!簡単ですねー
(まぁこのページ。カスタマイズに難があるのですが、それは別のお話で(笑))
ログインしてみます!
上記の組み込みログインページのCreate account
を Click してアカウントを作ります。
下記な感じで登録します。電話番号は適当です
すると登録したメールアドレスに下記のようなメールが届きます
それと同時に WebApp が下記のような Confirm 画面に遷移しているので、
メールで受け取ったコードを入力して、Confirm ボタンを押すと、、
無事ログインできました ❗
追加しておいたサインアウトボタンもきちんとありますね ❗
ここでサインアウトを押して、設定した ID とパスワードでログインできることを確認したら、
今回の実装は終了です
お片付け
下記のコマンドで全てのリソースを削除します
$ amplify delete
感想
Amplify を使うと、とても簡単にログイン画面実装できて楽ですねー!
と思った反面、別のアカウントで別環境にデプロイするときどうするんだろー、、とか既存リソースへの接続は使いにくいな、という感想
本気で amplify を使っていくなら Backend は CDK なり Terraform なり別で用意したほうがよいかなーとか思いました。
とはいえ間違いなく便利 ❗
まとめ
今回は Amplify CLI を使って、React に認証画面を追加してみました ❗
実際に Backend をデプロイして動作を確認して、全て削除してお片付けしました。
今回のリポジトリはこちら
https://github.com/sisi100/react-amplify-cognito/tree/20210710
といっても、amplify のファイルがないので amplify cli でコマンド叩かないと動かないのですが、、