AWS Amplify: Auth関連まとめ

AWS AmplifyにおけるAuth関連処理についてまとめます。

Amplify初期設定についてはこちらの投稿を参照してください。

AWS AmplifyでReactアプリケーション (TypeScript & GraphQL)

今回の環境はこちら

React 16.13.1
TypeScript 4.0.2
aws-amplify 3.1.1

Signin

Auth.signIn()

import { Auth } from 'aws-amplify';

export const networkSignIn = async (name: string, password: string) => {
  return await Auth.signIn(name, password);
}

Signout

Auth.signOut()

import { Auth } from 'aws-amplify';

export const signOut = async () => {
  return await Auth.signOut();
}

Signup

import { Auth } from 'aws-amplify';

export const createAccount = async (
  { username, password, group }: 
  { username: string; password: string; group: string }
) => {
  return await Auth.signUp({
    username,
    password,
    attributes: {
      'custom:userGroup': group
    }
  });
}

custom.userGroupはCognitoユーザに追加できるカスタム属性の例となります。
aws-amplifyではユーザをuserGroupへ追加、またuserGroupから削除することは可能ですが、実はuserGroupを取得することができないので(執筆時点)、このカスタム属性を利用して、フロントエンドで制御する権限周りの処理を行うことにしました。
(例: メニューの出しわけ等)

Cognito > General settings > Attributes

Confirm signup

前述のSignupを行った後、CognitoではユーザVerificationが必要となります。Auth.sinUp() が完了すると登録メールアドレスにVerification Codeが送付されます。そのCodeをもって、Auth.confirmSignUp() を実行することでユーザ登録が完了します。

import { Auth } from 'aws-amplify';

export const confirmSignUp = async (username: string, code: string) => {
  return await Auth.confirmSignUp(username, code);
}

Add user to group

ユーザをuser groupへ登録します。

import { Auth, API } from 'aws-amplify';

export const addUserToGroup = async (username: string, groupname: string) => {
  let apiName = 'AdminQueries';
  let path = '/addUserToGroup';
  let myInit = {
      body: {
        "username" : username,
        "groupname": groupname,
      },
      headers: {
        'Content-Type' : 'application/json',
        Authorization: `${(await Auth.currentSession()).getAccessToken().getJwtToken()}`
      }
  }
  return await API.post(apiName, path, myInit);
}

Remove user from group

ユーザをuser groupから削除します。

import { Auth, API } from 'aws-amplify';

export const removeUserFromGroup = async (username: string, groupname: string) => {
  let apiName = 'AdminQueries';
  let path = '/removeUserFromGroup';
  let myInit = {
      body: {
        "username" : username,
        "groupname": groupname,
      },
      headers: {
        'Content-Type' : 'application/json',
        Authorization: `${(await Auth.currentSession()).getAccessToken().getJwtToken()}`
      }
  }
  return await API.post(apiName, path, myInit);
}

Disable user

Amplifyではユーザを物理削除することができません。(執筆時点)
ユーザを無効にする事は可能です。

import { Auth, API } from 'aws-amplify';

export const disableUser = async (username: string) => {
  let apiName = 'AdminQueries';
  let path = '/disableUser';
  let myInit = {
      body: {
        "username" : username,
      },
      headers: {
        'Content-Type' : 'application/json',
        Authorization: `${(await Auth.currentSession()).getAccessToken().getJwtToken()}`
      }
  }
  return await API.post(apiName, path, myInit);
}