AWS( アマゾンWebサービス)から昨年2017年の暮れに発表されたMobile App向けのJSライブラリの「AWS Amplify」。発表されたのはいいけどドキュメントが英語…うまくいかないし…というかたもいらっしゃるのではないでしょうか。
(実際、私も1週間くらいこの話ではもがきました。)
今回はAmplifyライブラリを試してわかった実装方法について記していきます。
目次
前提:AWS公式サイトのCognito Javascript SDKは使わない(IonicチュートリアルもNG。最新ではありません)
「Ionic」のWEBサイトにアクセスすると出てくるのが、ionic v3のスターターテンプレート「aws」の情報です。結論から言うと、このテンプレートは昔の(昨年のAmplify発表以前の)Cognito JSライブラリがバンドル(同梱)されており、ionic start→awsと進むと旧来型のセットアップとなってしまうケースもあります(必ず最新のCLIにアップデートしてからawsテンプレートでのスタートをおこなってください。
AWSからも公式のチュートリアル(サンプル)はリンクつきで紹介されています(リンク)。
では、実際の実装方法について説明します。
(すでにIonic startでAWS以外を選んでスタートした人のための話です)
まずはawsmobileをダウンロードする
まずはAWS Mobile HUBと言うサービスを使用するためにawsmobile-cliをnpmからダウンロードし、インストールしましょう。CLIなので-g(グローバル)オプションをつけるのを忘れずに。
npm install -g awsmobile-cli
ダウンロードが終わったら「awsmobile configure」を実施します。
リージョンやAPIキーを聞かれます。もしAWS Mobile HUBを使用したことがない場合は、aws startコマンドを叩きAWS mobile Hubのプロジェクトを最初に作成してください。
awsmobile使用経験者→awsmobile pullで設定ファイルをWEBからダウンロードします。
awsmobile使用未経験者→awsmobile pushで設定ファイルをWEBにアップロードします。
ユーザー登録を実装する
ユーザー登録を実装します。
まずは、registerページをIonicのコマンドを使って生成します。
ionic generate page Register
ページを作成したら、このページにAuthクラスとawsの設定ファイルを読み込ませます。
import Amplify, { API,Auth } from 'aws-amplify';
const aws_exports = require('../../aws-exports').default;
Amplify.configure(aws_exports);
今回はレジストレーションなので、登録関係のプログラムを書いていきます。
signup() {
letloading=this.loadingCtrl.create({
content:'Please wait...'
});
loading.present();
letdetails=this.userDetails;
this.error=null;
logger.debug('register');
letphonenum='+81'+details.phone_number; //+81などの国番号がないと先に進めないので注意
Auth.signUp(details.username, details.password, details.email,phonenum)
.then(user => {
this.navCtrl.push(ConfirmCodePage,{username:details.username});
})
.catch(err => {
this.error=JSON.stringify(err);
})
.then(() => loading.dismiss());
}
ここまで登録し、Signupしたユーザーには電話番号/E-mailの存在を確認するVerifyコードがそれぞれの携帯電話に配信されます。そのVerifyコードをAWSサーバーに指定した方法で送信することで認証できるので、その認証部分のtsを記入し、入力が完了したら送信されるように仕組みます。
confirmCode(){
Auth.confirmSignUp(this.username, this.code)
.then(result => {
this.navCtrl.first();
})
.catch(err => {
this.result=JSON.stringify(err);
})
}
公式APIドキュメント:https://aws.github.io/aws-amplify/api/index.html
公式Githubソースページ:https://github.com/aws/aws-amplify