質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.21%

cakephpで登録された情報でログインできない

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,607

DaikiYamada

score 9

cakephpを最近勉強し始めました。

簡単な会員制掲示板を勉強していますが、 登録された情報でログインできません。 (メールアドレスとパスワードが一致していればログインできるはずですが、 「メールアドレスかパスワードが間違っています」と表示されます)

どこに原因があるのかが未だにわかっていないので よろしければ教えて下さい。

■補足

PostController

<?php

class PostsController extends AppController {

  public $uses = array('User');//ユーザーテーブルの呼び出し

  public $components = array(
    'Session',
    'Auth' => array(
      'authenticate' => array(
        'Form' => array(
          'fields' =>
            array('email' => 'email', 'password' => 'password') //フォームの値 => fields
          )
        ),
    'loginRedirect' => array('action' => 'postlist'),//ログイン後のリダイレクト先
    'logoutRedirect' => array('action' => 'index'),//ログアウト後のリダイレクト先
    'loginAction' => array('action' => 'index'),//ログイン処理をどこで行うか
    )
  );

  public function beforeFilter() {
    $this->Auth->allow('index');//トップページはログインせずともアクセスできるようにする
  }

  public function index ()
  {
      if ($this->request->is('post'))
      {
          if ($this->Auth->login())
          {
              return $this->redirect($this->Auth->redirect());
          }
           else
          {
              $this->Session->setFlash('メールアドレスかパスワードが間違っています', 'default', array(), 'auth');
          }
      }
  }
  //var_dump($post);

  public function postlist() {

  }
}

UsersController

<?php


class UsersController extends AppController {

  public $components = array('Auth');

  public function beforeFilter() {
    $this->Auth->allow('index', 'add');//addページにログインせずともアクセスできるようにする
  }

  public function index() {

  }

  public function add() {
    $this->request->data['User']['password'] =
      AuthComponent::password($this->request->data['User']['password']);

      $this->User->save($this->request->data);

      return $this->redirect(
        array(
            'controller' => 'posts',
            'action' => 'index'
        )
      );
  }
}

Post/index.ctp(view)

<h1>ログイン</h1>
<div>
  <?php echo $this->Session->Flash('auth'); ?>
  <?php echo $this->Form->create('Post', array('action' => 'index')); ?>
  <?php echo $this->Form->input('User.email', array('label' => 'メールアドレス')); ?>
  <?php echo $this->Form->input('User.password', array('label' => 'パスワード')); ?>
  <?php echo $this->Form->end('ログイン'); ?>
</div>
<?php echo $this->Html->link('新規登録はこちら!', array('controller' => 'users', 'action' => 'index')); ?>

Users/index.ctp(view)

<h1>新規登録</h1>
<?php echo $this->Form->create('User', array('action' => 'add')); ?>
<?php echo $this->Form->input('User.name', array('label' => 'ユーザー名')); ?>
<?php echo $this->Form->input('User.email', array('label' => 'メールアドレス')); ?>
<?php echo $this->Form->input('User.password', array('label' => 'パスワード')); ?>
<?php echo $this->Form->end('登録する'); ?>
<?php echo $this->Html->link(
    'ログイン画面へ',
    array(
      'controller' => 'posts',
      'action' => 'index'
    )
  );

?>

User.php(model)

<?php

class User extends AppModel {

  public $validate = array(
    'email' => array(
      'rule' => 'notBlank'
    ),
    'password' => array(
      'rule' => array('notBlank', 'password')
    )
  );
}

postlist.ctp

<h1>会員制掲示板へようこそ</h1>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

こんばんは。

DBに登録する際に、パスワードは暗号化されていますか?

恐らく、以下のコードで保存前に暗号化をお考えだと思います。

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

しかし、CakePHP2.4以降は以下のように暗号化するよう推奨されています。

(参考サイト:http://book.cakephp.org/2.0/ja/tutorials-and-examples/blog-auth-example/auth.html)

/* モデルにて */

App::uses('AppModel', 'Model');

App::uses('SimplePasswordHasher', 'Controller/Component/Auth');

class Post extends AppModel {

    public function beforeSave($options = array()) {

        if (!$this->id) {

            $passwordHasher = new SimplePasswordHasher();

            $this->data['Post']['password'] = $passwordHasher->hash($this->data['Post']['password']);

        }

        return true;

    }

私もCakePHPを勉強している身ですが、新規登録の際に暗号化しておらず、Authコンポーネントのloginメソッドではじかれていました。 ぜひ一度ご確認ください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/12/17 21:34

    私の場合、class Postではなく、class User で良いでしょうか?
    仮にclass Userとしても「メールアドレスかパスワードが間違っています」と表示されます。

    キャンセル

  • 2015/12/20 07:33

    ご返信が遅くなり、申し訳ありません。
    クラス名はモデルの名前に合わせて下さい。
    ちなみに、パスワードはハッシュされてますか?

    キャンセル

0

■PostControllerクラス
array('email' => 'email', 'password' => 'password') //フォームの値 => fields

上記部分は下記にしてみたらどうでしょうか?
cakephpのAuthはデフォルトだとusernameとpasswordのカラムをチェックします。
なのでemailとpasswordでログインしたい場合は、下記が正しいです。

■PostControllerクラス
array('username' => 'email', 'password' => 'password') //フォームの値 => fields

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る