2 層の認証が必要です。「ハード」認証と「ソフト」認証と呼びます。ハード レイヤーは、標準の電子メールとパスワードのレイヤーです。私は現在、この Railscast: #250 Authentication from Scratch (revised)で説明されているように、 has_secure_passwordとbcrypt-ruby gemを使用してこれを実装しました。
「ソフト」レイヤーについては、各ユーザーに 4 桁の PIN を持たせ、それを使用して身元を確認し、アクティブ ユーザーとして切り替えることができるようにします。この PIN をパスワードと同じように暗号化したいと思います。
私の質問
「password_digest」列の依存関係がある場合 (カスタマイズ可能または拡張可能とは思われません)、has_secure_password を使用してこれら 2 つの認証レイヤーを使用するにはどうすればよいですか? Users テーブルに「pin_digest」列を作成し、それを別のパスワードのように扱いたいのですが、has_secure_password はこれをサポートしていないようです。
また、これを実際に実装する方法について提案があるかどうか、または何らかの理由でそれが悪い考えのように思われるかどうかも知りたいです。
なぜ私はこれをやろうとしているのですか?
共有キオスク用のアプリを作成しています。ユーザーが毎回完全なログイン資格情報を入力しなくても、できるだけ簡単に切り替えることができるようにしたいと考えています。これは、人々がすばやく移動する小売店環境で使用され、切り替えのたびに完全な電子メール アドレスとパスワードを入力するのは面倒で時間がかかる可能性があります。
誰かが良いアイデアを持っていれば、私は提案やアプローチを受け入れます。:)
実際にどのように見えるか
- ユーザーは「ハード」認証を使用してログインします。
- ユーザーが「ハード」認証を使用してログインすると、他のユーザーは、ユーザーのリストから自分自身を選択して PIN を入力するだけで交換できます。
- ユーザーは、PIN を使用して何度でも交換できます。
- 誰かが「ハード」ログアウト ボタンをクリックすると、すべてのユーザーがログアウトされ、再度ログインするには「ハード」認証を使用する必要があります。
例
- Frank は仕事に取り掛かり、(「ハード」認証を使用して、電子メール アドレスとパスワードを入力して) 共有キオスクにログインします。
- フランクはキオスクでいくつかの作業を行います。
- ジョーは仕事を始め、キオスクも使用する必要があります。
- Joe がユーザーのリストで自分の名前をクリックすると、4 桁の PIN (「ソフト」認証) を入力するように求められます。
- Frank はアクティブ ユーザーではなくなりました。
- Joe がアクティブ ユーザーになりました。
- ジョーは、フランクがキオスクを再び使用する必要がある前に、しばらくの間、いくつかの作業を行います。
- Frank がユーザーのリストから自分の名前をクリックすると、4 桁の PIN を入力するように求められます。
- Frank は、作業が終わったら、[ログアウト] ボタンをクリックします。次にキオスクを使用する人は、「ハード」認証を使用してログインする必要があります。