Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9145

Cognito+API Gateway+Lambdaでユーザ作成APIを作りたいんだー!

$
0
0

AWSの認定は保有していますが
実践できていない主なサービスがサーバレスまわり…

ということで勉強を兼ねて、簡単なAPIを作成してみます。

やりたいこと

APIでユーザ作成
- username と passwordをリクエストボディに指定しAPIをコールするだけでユーザ作成する。
- メールアドレス/電話番号の認証は不要。

参考

LambdaでCognito認証(ユーザー作成)

やってみよう!

ユーザプールの作成

こんな私でもCognitoでユーザ管理をするにはユーザプールを作成しなければならないことは知っている。

属性は必要最低限を指定
image.png

image.png

image.png

image.png

認証フローはよくわからないため全てチェック。※今後勉強します
ALLOW_USER_PASSWORD_AUTH が絶対必要
「クライアントシークレットを作成」にはチェックを入れないこと。
image.png

Lambda用IAMロール

Lambdaの基本的なポリシーに加えて、「AmazonCognitoPowerUser」をアタッチする。
image.png

ユーザ作成用のLambdaを作成

今回、ソースコード内のアプリクライアントIDはLambdaの環境変数にセット
バリデーションやエラー処理は適当なので、適宜変更をお願いします

index.js
'use strict';constAWS=require('aws-sdk');constcognito=newAWS.CognitoIdentityServiceProvider();/**
 * SignUp
 * @param {string} loginName
 * @param {string} password
 * @returns {Promise<Object>} statusCode,headers,body
 */exports.handler=async(event,context)=>{constresponse={};letloginName;letpassword;console.log(event);// Validationif(!(event.body)||!('loginName'inJSON.parse(event.body))||!('password'inJSON.parse(event.body))){response["statusCode"]=400;returnresponse;}else{letreqestBody=JSON.parse(event.body);loginName=reqestBody["loginName"];password=reqestBody["password"];}// SignUp parametersconstparams={ClientId:process.env['APP_CLIENT_ID'],Username:loginName,Password:password};response["headers"]={"Access-Control-Allow-Origin":"*","Content-Type":"application/json"};// SignUptry{constuser=awaitcognito.signUp(params).promise();console.log('User sign up success!!!',JSON.stringify(user,null,4));response["statusCode"]=201;response["body"]=JSON.stringify({"loginName":loginName});returnresponse;}catch(err){console.log('User sign up failed...'+err);if(err.code=='UsernameExistsException'){response["statusCode"]=409;}elseif(err.code=='InvalidPasswordException'){response["statusCode"]=400;}else{response["statusCode"]=500;}returnresponse;}};

Lambdaのテスト

image.png

テストを実行
image.png

ユーザプールにユーザが作成された。めでたい!
image.png

API Gatewayの作成

image.png

「Lambdaプロキシの統合」にチェックを入れ、作成したLambda関数を選択する。
image.png

API Gatewayからのテスト実行
image.png

こちらもユーザが作成された。めでたい!!!
image.png

今後の宿題

  • 作成したユーザのステータスがUNCONFIRMEDなので,CONFIRMに変更するプログラムを追加する
  • APIでユーザ認証をし、アクセストークンを取得する
  • APIでユーザ情報を取得する

Viewing all articles
Browse latest Browse all 9145

Trending Articles