0

「ユーザー名」と「パスワード」を持つユーザー用のmongo db構造があります。Cakephp ログインで Auth を使用しようとしていますが、うまくいかないようです。$this->data を削除しようとしましたが、それでもうまくいきませんでした。

私のパスワードは Security::hash($this->data['User']['password']) を使用してハッシュされています

if(!empty($this->data))
{
   if($this->Auth->login($this->data))
   {
       echo "yes";
   }
   else{
       echo "no";
   }
}

私のアプリコントローラーにはこれがあります:

public $components = array('DebugKit.Toolbar', 'Session', 'Auth' => array(
    'loginAction' => array(
        'controller' => 'pages',
        'action' => 'home'
    ),
    'authenticate' => array(
        'Form' => array(
            'fields' => array('username' => 'username', 'password' => 'password')
        )
    )
));

login メソッドをデバッグした結果は次のとおりです。

array(
    'User' => array(
        'password' => '*****',
        'username' => 'test@test.com',
        'remember' => '0',
        'auto_login' => '0'
)
)

mongodb で Auth を使用できない理由がわかりません。事前に助けてくれてありがとう。

編集:

レイアウトを取り除こうとすると、ページの下部に次のようなクエリが表示されます。

db.users.find( {"username":"test@test.com","password":"2fdf49ffc396453960802df8fc2417655d1e8fca"}, [] ).sort( [] ).limit( 1 ).skip( 0 )

フォームから入力したパスワードのハッシュ値が、照会しているハッシュ値と異なります。ハッシュ値は「a2374c309ab7823dcd9b4e21dae7511f7a9c7ec5」である必要があります。Cakephp がパスワードを別のハッシュ値に変換しているのはなぜですか?

4

2 に答える 2

1

その答えを知ることができました。これは、データベースで検索するときに、cakephp がパスワードを自動的にハッシュするためです。

私が抱えていた問題は、ユーザーのパスワードを保存していたときでした。

Security::hash($this->data['User']['password'])

代わりにこれを使用する必要がありました:

AuthComponent::password($this->data['User']['password'])

特に@xgalvinへのすべての助けに感謝します

于 2013-05-09T17:22:20.183 に答える
1

の使用方法は 2 通りあります$this->Auth->login()。CakePHP APIドキュメントでは、次のように説明されています。

$user が指定されている場合、そのデータはログインしているユーザーとして保存されます。$user が空または指定されていない場合、リクエストはユーザーの識別に使用されます。

マニュアルには次のことも記載されています。

2.0 では、 $this->Auth->login($this->request->data) は、投稿されたデータでユーザーをログインさせます ...

したがって、users コントローラーの login メソッドには、何も渡すべきではありません。

if($this->Auth->login()) {
    // user is now logged in
}

ユーザーを手動でログインする必要がある場合は、ユーザー データを配列として渡すことができます。

if($this->Auth->login($this->request->data['User'])) {
    // user is now logged in
}

次のようなものはどこ$this->request->data['User']にありますか:

array(
    'id' => 1,
    'username' => 'admin',
    'password' => '1234',
);

注:どちらの場合も、パスワードは自動的にハッシュ化されるため、ハッシュ化する必要はありません。

于 2013-05-09T16:45:34.043 に答える