この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
サーバーレス開発部@大阪の岩田です。
タイトルそのままなのですが、CognitoにAdminSetUserPassword
という新しいAPIが追加され、ユーザープールの管理者がユーザーのパスワードを変更出来るようになりました。
Amazon Cognito launches enhanced user password reset API for administrators
aws-amplify-reactのサンプルアプリを使って早速試してみます。
検証用のアプリ作成
まずAmplifyのチュートリアルに従って進めていきます。 まずはアプリの雛形とCognitoユーザープールを作成します。
$ create-react-app myapp
$ cd myapp
$ amplify init
$ amplify add auth
$ amplify push
$ npm install aws-amplify aws-amplify-react
次にApp.jsを編集します
App.js
import React from 'react';
import logo from './logo.svg';
import './App.css';
import Amplify from 'aws-amplify';
import awsmobile from './aws-exports';
import { withAuthenticator } from 'aws-amplify-react'; // or 'aws-amplify-react-native';
Amplify.configure(awsmobile);
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default withAuthenticator(App, true);
編集できたらnpm start
して、ユーザーを作成します。
作成できました
AdminSetUserPasswordを使ってユーザーのパスワードを変更する
ここからが本題です。
新機能のAdminSetUserPassword
APIを使って、作成したユーザーのパスワードを変更してきます。今回はAWS Cliを利用します。
AWS Cliのバージョンです
$ aws --version
aws-cli/1.16.153 Python/3.6.5 Darwin/18.2.0 botocore/1.12.143
パスワードを変更します
$ aws cognito-idp admin-set-user-password --user-pool-id <作成したユーザープールのID> --username cm-iwata --password <設定する新しいパスワード>
変更後にマネジメントコンソールから確認してみると
ステータスがFORCE_CHANGE_PASSWORD
に更新されています。
今回はオプションに--permanent
を指定しなかったので、更新後のパスワードは一時的なパスワードになり、ユーザーのステータスはFORCE_CHANGE_PASSWORD
となります。
オプションに--permanent
を指定した場合は更新後のパスワードは恒久的に利用可能なパスワードとなり、ステータスはCONFIRMED
のままです。
更新後のパスワードでログインしてみます。
無事更新後のパスワードでログインに成功し、パスワード変更画面に遷移しました!
まとめ
Cognitoを利用してユーザー管理の基盤を構築しているようなシステムにとっては待望の機能ではないでしょうか?該当する場合はぜひAdminSetUserPassword
を使った機能拡張をご検討ください。