広告 JavaScript

【JavaScript】Cognitoでパスワードを変更する方法

はじめに

JavaScript用のSDKでAmazon Cognitoのユーザープールを使い、パスワードを変更する方法を紹介します。

JavaScriptでユーザープールを使うには「amazon-cognito-identity-js」が必要です。「amazon-cognito-identity-js」はnpmコマンドでインストールすることができます。

<script src="node_modules/amazon-cognito-identity-js/dist/amazon-cognito-identity.min.js"></script>

※パスはあくまでも例です。環境に応じて変更してください。

スポンサーリンク

パスワード変更(changePassword)

未ログイン時にパスワードを変更する

「changePassword」でパスワードを変更することができます。ただし「changePassword」はログイン後に実行する必要があるため、一旦「authenticateUser」でログインした後に「changePassword」でパスワード変更をしています。

※未ログイン状態で「changePassword」を実行すると、エラーになる。

function changePassword() {
    var username = "画面で入力されたユーザー名";
    var oldPassword = "画面で入力された旧パスワード";
    var newPassword1 = "画面で入力された新パスワード";
    var newPassword2 = "画面で入力された確認用の新パスワード";

    if (newPassword1 != newPassword2) {
        alert("新パスワードが一致しません。");
        return;
    }

    var poolData = {
            UserPoolId : 'ユーザープールID',
            ClientId : 'クライアントID'
    };
    var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);

    var userData = {
        Username : username,
        Pool : userPool
    };
    var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);

    var authenticationData = {
        Username : username,
        Password : oldPassword,
    };

    // ログイン処理
    var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function (result) {

            // パスワード変更処理
            cognitoUser.changePassword(oldPassword, newPassword1, function(err, result) {
                if (err) {
                    alert('パスワード変更に失敗しました。');
                } else {
                    alert("パスワードを変更しました。");

                    // パスワード変更時の処理を書く...
                }
            })
        },

        onFailure: function(err) {
            alert('パスワードが正しくありません。');
        },
    });
}

ログイン後にパスワードを変更する

ログイン後にパスワード変更する場合は、「getCurrentUser」で使用中のCognitoUserが取得できます。

使用中のCognitoUserを使い「getSession」でトークン情報の確認(再取得)をした後に「changePassword」でパスワードを変更をしています。

function changePassword2() {
    var username = "画面で入力されたユーザー名";
    var oldPassword = "画面で入力された旧パスワード";
    var newPassword1 = "画面で入力された新パスワード";
    var newPassword2 = "画面で入力された確認用の新パスワード";

    if (newPassword1 != newPassword2) {
        alert("新パスワードが一致しません。");
        return;
    }

    var poolData = {
            UserPoolId : 'ユーザープールID',
            ClientId : 'クライアントID'
    };
    var userPool = AmazonCognitoIdentity.CognitoUserPool(poolData);
    var cognitoUser = userPool.getCurrentUser();

    if (cognitoUser) {
        cognitoUser.getSession(function (err, session) {
            if (session.isValid()) {
                // パスワード変更処理
                cognitoUser.changePassword(oldPassword, newPassword1, function(err, result) {
                    if (err) {
                        alert('パスワード変更に失敗しました。');
                    } else {
                        alert("パスワードを変更しました。");

                        // パスワード変更時の処理を書く...
                    }
                })
            } else {
                // トークン情報の再取得に失敗...
            }
        }
    } else {
        // ログイン情報がない...
    }
}

終わりに

本記事では、JavaScript用のSDKでAmazon Cognitoのユーザープールを使い、パスワードを変更する方法を紹介しました。

[AWS 関連記事]

helpful