2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【amplify】signIn機能実装にて、認証が済んでいない場合のエラーハンドリングについて

Last updated at Posted at 2022-03-27

:beginner: はじめに

signIn/signUp周りの流れとして、signUp > 認証メールが送られる > 認証画面でコード入力 > 認証完了画面 > signInページでsignIn > HOME というような流れで進めようとしています。

:question: 困ったこと

今回の困ったポイントとして、認証画面で認証コードを入力せずにsignInページなどにURLなどを変更して行った場合(そもそもここを行けないようにする必要がある?)、認証ページに戻る導線がありませんでした。

そこで、仮にsignInページでメアド・パスワードを入力しても、エラーとして返ってきた内容によって認証ページに遷移させたりする機能を実装することにしました。

:pick: どうやったか

結論からいうと、try/catch構文を使ってcatch(err)に返ってきたerrに**"UserNotConfirmedException"**と返ってきたら認証ページ、それ以外はalert("サインインに失敗しました")とページ遷移/表示されるようにしました。

:computer: コード

export const signIn = async (params: SignIn) => {
  try {
    const username = params.email;
    const password = params.password;
    const res = await Auth.signIn(username, password);
    window.location.href = paths.afterRoutes.home;
    return res;

  } catch (err: any) {
    const { code } = err;

    if (code === "UserNotConfirmedException") {
      window.location.href = paths.beforeRoutes.confirmUser;
    } else {
      alert("サインインに失敗しました。");
    }
  }
};

errorが返ってきた際に、consoleでerror内容を見てみると、下記のような状態になっていたので、catchの中でconst {code} = err;としてerrからcodeを分割代入しています。

Screenshot 2022-03-27 13.32.59.png

:confetti_ball: まとめ

上記のようにすることで、指定したエラー文が返ってきたら認証ページへ、それ以外はalertを表示、成功したらHOMEへ遷移という流れを実装できました。

try/catchのcatch内で処理を書くということをあまりしたことがなかったので、新たな学びとなり良かったです。

:eye: 参考

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?