情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

CakePHP ログイン認証チェック

CakePHPのAuthComponentでログイン認証がうまくいかない時は?

CakePHPで記事を投稿するアプリを作っていてログイン状態の保持の為にAuthComponentを利用していたのですが ログインページでユーザ名とパスワードは合っているのにログインができないということが起こったので解決法、手順等を記載していきます。

1. なぜか認証されない

まずログイン機能を実装するために「CakePHP ログイン Auth」などで検索すると 以下のような文が出てくると思います。

if($this->Auth->login()){
    //ログイン成功したときの処理
}else{
    //ログイン失敗したときの処理
}

私もこれを実装したわけですがユーザー名とパスワードは合っているのに「ログイン成功」しませんでした。

2.テーブル名、フィールド名は正しいのか?

では原因は何か探していきます。

まずユーザーテーブルとフィールド名が正しく用意できているかを確認してください。 参考書などを読んでいるとどうやら テーブル名は「Users」 フィールド名は「username」と「password」でないといけないようです。

テーブル作った後に知りました。 ModelのvalidateやViewのaddなどなど色々変えていかなくてはいけません。

ちなみにフィールドの「password」ですが、varcharで最低でも40文字以上は保管できるようにしてください。 「password」にはハッシュにより暗号化された文字列が入るので保管できる量が少ないと正しく値を保持できなくなります。

3.ハッシュ化はされているか?

こちらも重要なのですがAuthComponentで認証するにはパスワードがハッシュ化されている必要があります。 なのでハッシュ化の確認をしてください。

phpMyAdminのUserテーブルを確認してpasswordに入力した値がそのまま入っていたら パスワードをハッシュ化する必要があります。

手順ですが、新しくユーザーを追加するときにpasswordをハッシュ化させるのでUsersControllerのaddに

$this->request->data['User']['password'] = $this->Auth->password($this->request->data['User']['password']);

を追記します。ただし

$this->User->create();

createの上に書きましょう。

さてこれで新たにユーザーを作ってからphpMyAdminを見るとパスワードがハッシュ化されているはずです。

ハッシュ化されていれば、ログインをすると成功します!

それでは