アカウント

未確認のアドレスが止めるのは消費であって、閲覧ではありません

メールアドレスの確認が済んでいない状態でも、アプリの中にいることができます。確認が制御しているのは移動ではありません。消費をともなう操作はサーバー側で拒否され、画面は警告バナーと、コードをもう一度送るための道筋で応えます。そのボタンは、送信が起きた時点で自分をロックします。

未確認であることと、ログアウトしていることは同じではありません

アプリは未確認のアカウントを、ログアウトした場合にまとめるのではなく、独立したセッション状態として扱います。その解決はapps/jewelry-mobile/src/features/auth/auth-provider.tsxの1つの式で、emailVerified ? 'authenticated' : 'unverified'と書かれています。未確認のアカウントに、ようこそ画面ではなくアプリと専用の警告バナーが与えられるのは、そのためです。

その状態が何を制御しているのかは、正確に言う価値があります。誇張しやすいところだからです。決めるのは、どの画面が描かれるかです。何をしてよいかを決めているわけではありません。保護されたリクエストはすべて変わらずサーバーに送られ、答えはそこから返ってきます。

つまりバナーは、アプリが握っている錠ではありません。ほかの場所で下された判断の目に見える半分であり、アプリがそれを知らされた時点で示されます。バナー自体はアプリの各画面を包む画面コンテナが描いており、いま見ているものの上に現れるのはそのためです。

再送信ボタンと、かつて間違えていたこと

このボタンには記録された経緯があり、それを知ると、そうでなければ恣意的に見える挙動が説明できます。

かつては、起きていない送信を報告していました。
リクエストが黙って飛ばされている間、画面はコードを送ったと表示していました。その修正はapps/jewelry-mobile/src/features/auth/use-resend-cooldown.tsのコメントに記録されています。
いまは送信のあとロックされ、カウントダウンを表示します。
このロックは、古いメッセージが隠していたことの正直な形です。ボタンの状態が、もう一度送信できるかどうかと一致します。
ロックは画面を離れても残ります。
別の画面に移って戻っても、ロックされていないボタンが出てくるわけではありません。真新しく見える画面は、真新しい許可ではありません。
ロックはアプリを閉じても残ります。
再起動はカウントダウンを消す方法ではありません。開き直すのに時間がかかる端末では、試す前に知っておく価値があります。
カウントダウンはアドレスに対して保持されます。
メールアドレスごとに保存されます。別のアドレスを確認すると、前のカウンターの続きではなく、別のカウンターが始まります。
その長さはここには書きません。
この値は動いているシステムのパラメーターであり、このページでは公開しません。画面のカウントダウンを読んでください。

警告バナーが読み違えられるところ

以下はいずれも、アプリの中を自由に動けることから自然に出てくる読み方で、いずれも役に立たない方向へ進みます。

  • 自由に移動できることを、アドレスが確認済みである証拠として読む。

    移動は、確認の状態が支配しているものではありません。アドレスについて述べているのは画面のバナーであって、障害がないことではありません。

  • 拒否を、そのとき使っていた画面や機能のせいにする。

    拒否は、アカウントの状態に対してサーバーが出します。目の前の機能はそれが表に出た場所であって、原因ではありません。

  • 制限をアプリが握っていて、解除できると考える。

    クライアントは拒否を伝え、バナーを描きます。結果を決めているわけではないため、端末の側に変えられるものはありません。

  • ロックされている間に、再送信ボタンを繰り返し押す。

    ロックされた状態は、すでに起きた送信を映しています。タップを繰り返しても、カウントダウンが自分で変えること以上には何も変わりません。

  • ロックされたボタンを、アドレスに届いていない印として扱う。

    ロックが報告するのは送信であって、到達ではありません。アドレス自体が間違っていたのなら、それを直すことが意味のある変更で、そのアドレスは自分のカウンターを持ちます。

再送信ボタンが反応しないときに確認すること

以下はいずれも、いま開いている画面で片が付きます。

  • カウントダウンが見えているかを確かめる。カウントダウン付きのロックされたボタンは、すでに行われた送信を報告しています。
  • 待つ時間を使う前に、画面が確認しようとしているアドレスを1文字ずつ確かめる。
  • ロックを消すためにアプリを再起動しない。ロックは再起動をまたいで残ります。
  • 画面を離れて戻れば新しいボタンになると期待しない。ロックは、画面が開いていることに結び付いていません。
  • アドレスが間違っていたなら、待つのではなく変える。別のアドレスは自分のカウンターを持ちます。
  • バナーが出ている間に操作が拒否されたなら、その操作を不具合として報告する前に、2つが同じ主題であることを書き留める。

このページの範囲の外にあるもの

ここでの根拠は、モバイルのクライアントが表示し、保存するものです。以下はその一部ではありません。

  • 消費に当たる操作の一覧。これはサーバーで判断され、クライアントからは読み取れないため、ここではどのような形でも示しません。
  • 再送信のロックの長さ、コードの桁数、コードが使える時間、許される試行の回数。いずれもこのページでは公開しません。
  • 登録フォームから未確認の状態に至る経緯。その受け渡しは別の主題で、ここでは開きません。
  • アカウントの削除とパスワードの問題。どちらもこのページでは説明しません。
  • 金額、パッケージ名、価格、通貨。このページの内容は、その種の数値に依存していません。
  • サーバー側のセッションの規則全般。この画面が報告するのは、クライアントが描くものと、端末に保存するものだけです。

よくある質問

メールアドレスを確認する前に、アプリを使えますか?

見て回ることはできます。入場を決めているのは確認ではありません。未確認のアカウントには、警告バナーとともにアプリが与えられます。消費をともなう操作はサーバーに拒否され、アプリはバナーと、コードをもう一度送るための道筋を示して応えます。

アドレスが未確認の間、どの操作が止められますか?

それはサーバーで判断され、クライアントはその一覧を持たないため、このページでは示しません。アプリは拒否が起きたときにそれを伝えるだけで、操作を前もって絞り込むことはしません。

再送信ボタンがロックされてカウントダウンしています。コードは実際に送られたのでしょうか?

ロックは送信に続くものです。かつてこのボタンが、リクエストが飛ばされている間に送信を報告していたため、まさにその理由でロックが導入されました。したがって、いまのロックされた状態は正直な報告です。画面を離れても、アプリを再起動しても、それは消えません。

間違ったアドレスで登録しました。カウントダウンが終わるまで待つ必要がありますか?

いいえ。カウントダウンはメールアドレスごとに保存されるため、別のアドレスを確認すると、いま見ているカウンターの続きではなく、別のカウンターが始まります。