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);
}