AWSCognito User PoolJavaScript

aws-amplifyを使ったSPAで新規ユーザーにログイン時パスワード変更を強制する

adminCreateUserでユーザーを作成した時など、Cognito User Poolsでは初回ログイン時にパスワードの変更を強制させることができます。 その際のフロントエンドの実装をaws-amplify使ったケ […]

広告ここから
広告ここまで

adminCreateUserでユーザーを作成した時など、Cognito User Poolsでは初回ログイン時にパスワードの変更を強制させることができます。

その際のフロントエンドの実装をaws-amplify使ったケースでざっくりまとめました。

tips: signIn()はresolveで返ってくる

aws-amplifyでは、Auth.signIn(username, password)でログイン処理を組めます。この関数はPromiseを返してくるので、.then()/ .catch()で結果を拾うことになります。

import { Auth } from 'aws-amplify';
function signIn(username, password) {
return Auth.signIn(username, password)
.then(() => {message: "Login successfully"})
.catch(() => {message: "Login failed"})
}

で、パスワード変更が必要な場合はログインできない状態なので、例外を返してくる(= .catchに行く)のではと思っていました。が、ソースを見るとresolveなので.then()にくるみたいです。

ということで「resolveされたからログイン成功だー」という実装にすると、パスワード更新が必要な場合や、MFA設定している場合につらいことになるので要注意です。

パスワード更新が必要な場合の見分け方

見分け方ですが、resolveされた値を見ればわりと一発です。

challengeNamechallengeParamというパラメータが含まれている場合は、MFAやパスワード更新などのアクションが必要なケースになる様子です。

import { Auth } from 'aws-amplify';
function signIn(username, password) {
return Auth.signIn(username, password)
.then(result => {
const hasChallenge = Object.prototype.hasOwnProperty.call(result, 'challengeName')
if (!hasChallenge) return { message: "Login successfully" }
if (result.challengeName === 'NEW_PASSWORD_REQUIRED') {
return {message: 'new password required'}
}
})
.catch(() => {message: "Login failed"})
}

.challengeParam.requiredAttributesがパスワード更新時の処理に必要となります。Reduxなどで実装している場合はstoreに入れておくようにすると良いでしょう。

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts