AWSReact

AWS AmplifyをReactに組み込んでユーザー認証まわりをいい感じにする

なんかいい感じのがあったので試してみた。 https://github.com/aws/aws-amplify Reactプロジェクトのセットアップ 何はともあれReactプロジェクトがなければ話になりません。 Crea […]

広告ここから
広告ここまで

なんかいい感じのがあったので試してみた。
https://github.com/aws/aws-amplify

Reactプロジェクトのセットアップ

何はともあれReactプロジェクトがなければ話になりません。
Create React Appでサクッと作っちゃいます。

$ mkdir amplify-react
$ cd amplify-react
$ create-react-app ./

npm install -g create-react-appでCreate React Appは導入できます。

こんなメッセージが出れば準備OK

Success! Created amplify-react at /Users/develop/node/react/amplify-react
Inside that directory, you can run several commands:

  yarn start
    Starts the development server.

  yarn build
    Bundles the app into static files for production.

  yarn test
    Starts the test runner.

  yarn eject
    Removes this tool and copies build dependencies, configuration files
    and scripts into the app directory. If you do this, you can’t go back!

We suggest that you begin by typing:

  cd /Users/develop/node/react/amplify-react
  yarn start

Happy hacking!

yarn startまたはnpm startすると、以下のようなページがでます。

デフォルトではhttps://localhost:3000/

ディレクトリ構造はこんな感じ。

$ tree -L 1
.
├── README.md
├── node_modules
├── package.json
├── public
├── src
└── yarn.lock

aws-amplifyのインストール

いよいよインストールします。

React Nativeの場合はaws-amplify-reactではなくaws-amplify-react-nativeをインストールします。

$ npm i -S aws-amplify aws-amplify-react

AWSサービスのセットアップ

認証周りの機能を利用するためには、Amazon Cognito User PoolAmazon Cognito Identity Poolが必要です。

ドキュメントAWS Mobile Hubで一括セットアップというボタンがありますので、「ちょっとよくわからない」という方はこれを使いましょう。

以下の値が必要となりますので、控えておきましょう。

  • 両サービスのデプロイ先リージョン名(us-east-1など)
  • Amazon Cognito Identity Pool ID
  • Amazon Cognito User Pool ID
  • Amazon Cognito Web Client ID

aws-amplifyのセットアップ

ここまで順調に進めば、必要なデータが揃っているはずです。
ということで先ほど作成したプロジェクトにaws-amplifyを組み込んでいきます。

src/App.js

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
// aws-amplifyの読み込み
import Amplify from 'aws-amplify';
// Reactへの組み込み用HOC
import { withAuthenticator } from 'aws-amplify-react';

// AWSリソースの情報読み込み
Amplify.configure({
    Auth: {
        identityPoolId: 'XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab', //REQUIRED - Amazon Cognito Identity Pool ID
        region: 'XX-XXXX-X', // REQUIRED - Amazon Cognito Region
        userPoolId: 'XX-XXXX-X_abcd1234', //OPTIONAL - Amazon Cognito User Pool ID
        userPoolWebClientId: 'XX-XXXX-X_abcd1234', //OPTIONAL - Amazon Cognito Web Client ID
    }
});

class App extends Component {
  render() {
    return (
      <div className="App">
        <header className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h1 className="App-title">Welcome to React</h1>
        </header>
        <p className="App-intro">
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

// withAuthenticatorでラップする
export default withAuthenticator(App);

元のソースとの差分は10〜20行くらいでいけました。
基本機能についてはwithAuthenticator()を使うことで勝手に読み込むようにしてくれます。

変更後の画面

上記の変更を保存すると、npm startで表示させてるページが大きく変わります。

ログイン画面が出てくる

またログイン画面だけでなく、新規アカウントの作成画面や認証コードの入力画面も用意してくれます。

アカウント作成画面も作ってくれる

認証画面もあるので、必要最低限は揃っている

おわりに

本格的に使うとなるとReduxやredux-saga / redux-thunkあたりとの相性なども気になってくるところですが、サクッと何か作りたい時にはかなり便利そうです。

ログイン画面のカスタマイズやServerless Frameworkで作った認証つきAPIとの連携なども今試しているところですので、時間が出来次第こちらも記事にして紹介していきたいと思います。

今回のサンプルコード(使い方はREADME.md参照)

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts