everyauth のことは忘れてください。このライブラリはやり過ぎです。認証の実装は実際には非常に簡単です。スキーマに従ってください。
- ユーザーはサーバーに
username
渡します。password
- サーバーは、そのユーザーが存在するかどうかを DB で取得
username
およびチェックします。ユーザーがいない場合は、エラーで応答します。password
password
- ユーザーがいて、Express のビルトイン セッション メカニズムを使用するようになりました。を呼び出し
req.session.regenerate
、コールバックで do を実行しますreq.session.userID = user.id
。Express は自動的に Cookie をユーザーに送信します。
- 基本的にデータベースで
req.session.userID
. 見つかった場合は、 に保存しreq
ますreq.user = user
。
- ビューでは、
req.user
変数が設定されているかどうかを確認するだけです。そうであれば、私たちは認証されています。そして、あなたは完了です!
広告 1+2) 認証を安全にするために、何らかの暗号 (および/または HTTPS) を使用する必要があります。たとえば、パスワードは と の 2 つの部分で DB に保持する必要がありsalt
ますhash
。salt
は (登録時に) ランダムに生成され、hash = hash_it(pwd, salt)
はhash_it
ハッシュ アルゴリズム (例: MD5 または SHA256) です。
クライアント側の認証は、いくつかの手順で行うことができます (JavaScript を使用できる場合のみ)。
- サーバーはログイン ページにランダム
new_salt
に送信します (または JavaScript で生成します。生成アルゴリズムを非表示にする必要はありません)。
- ユーザーは AJAX リクエスト
give me salt for user X
を送信し、サーバーはsalt
DB に格納された (salt
公開されている) で応答します。
- で応答ハッシュ
pwd
しsalt
、結果を で再度ハッシュしnew_salt
て、変数に格納しますhpwd
。
- クライアント
username
は 、hpwd
およびnew_salt
をサーバーに送信します。
- サーバーは
pwd
DB から を取得しusername
、ハッシュpwd
しnew_salt
て結果を比較しhpwd
ます (注: は保存しませんnew_salt
)。
username
とが同じであっても、(外部の観点から)ランダムにログインするたびにデータがネットを流れるため、この方法は便利ですpassword
。
password
リークは深刻な問題であるため、これは重要です。誰かがあなたのアプリのアカウントを破ることができるからではありません (あなたが銀行でない限り、それは小さな損害ですが、そのような質問をすることはありません :D )。その主な理由は、人々が銀行口座を含む複数のサイトで同じパスワードを使用する傾向があるためです。