0

ログイン情報を別の既存のアプリケーションに依存する必要がある CakePHP 2.2.3 アプリケーションを作成しています。ユーザー名/パスワードの組み合わせは別のデータベース/サーバーに存在し、CakePHP アプリをセットアップして、初めてインターフェイスにログインしたときに新しいユーザーを作成しました。プロセスは次のとおりです。

  1. ユーザーが初めてログインし、ユーザー名とパスワードを提供します。CakePHP ユーザー レコードはまだ存在しません
  2. システムは、同じ(サニタイズされた)ユーザー名を持つユーザーが反対側に存在するかどうかを確認します
  3. ユーザーが存在する場合は、パスワードを取得し、パスワードを比較して一致するかどうかを確認します。
  4. パスワードが一致する場合は、提供されたものをハッシュし、ユーザー レコードを保存します
  5. 新しく作成したユーザーにログインします

これにより、いくつかの問題が解決されます。主に、ユーザーが特定のことを行うためにログインする場所が複数あることです。

私の問題は、パスワードをハッシュするときに CakePHP が取得する値が時間の経過とともに変化するように見えることです。そのため、ユーザーがパスワードでログインする代わりに、ログインするたびに新しいユーザー レコードが作成されます。昨日、特定のユーザーでログインできないという問題が発生しました... login() アクションは、パスワードのハッシュ値として見られました。

特定のユーザーのパスワードは「roads」です

昨日のハッシュは: 988042d7f4e62760238d895472ecaf1844094f9f

今日、道路をハッシュすると、a8318e7bbe8ee5efc59f53b4ede4d80dc0495c6d

なぜこれが発生するのかを確認するためにどこから始めればよいのか、私には本当にわかりません。開発を進めるためにできることは、ログインするユーザー レコードのパスワードのハッシュ値を変更することだけです。これを行うのは2日目です。config/core.php のセキュリティ ハッシュまたはソルト値で何か問題があった可能性はありますか?

次のいずれかを行います。

  1. ハッシュが変化する理由を理解する
  2. ユーザーのログインに他のデータベースを使用するように Auth コンポーネントを変更します。

しかし、どちらもどこから始めればよいかわかりません

4

2 に答える 2

1

何が問題なのかはわかりませんが、どこを見ればよいかはわかります。CakePHP の AuthComponent は Security クラスを使用してパスワードのハッシュを行います。

public static function password($password) {
    return Security::hash($password, null, true);
}

これは、デフォルトのアルゴリズムでパスワードをハッシュし、Security.salt で構成されたソルトを使用するように Security クラスに指示しています。いずれかのアプリケーションで Security.salt の値が異なる場合、ハッシュは一致しません。

2 つ目の可能性は、ユーザー レコードを作成するときに、Security::hash に対して AuthComponent と同じ設定を使用していないことです。別のアルゴリズムを指定していないこと、またはソルトを提供していないことを確認してください。

3 つ目の可能性は、1 つのアプリケーションにハッシュ アルゴリズムがないことです。たとえば、ログイン アプリケーションで sha1 を使用できるが、データベース アプリケーションで使用できない場合、ハッシュは一致しません。データベース アプリケーションは sha256 にフォールバックし、ログイン アプリケーションは sha1 を使用します。

于 2012-12-12T23:47:07.253 に答える