cakephpで登録された情報でログインできない
受付中
回答 2
投稿
- 評価
- クリップ 0
- VIEW 2,749
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
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メソッドではじかれていました。 ぜひ一度ご確認ください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
■PostControllerクラス
array('email' => 'email', 'password' => 'password') //フォームの値 => fields
上記部分は下記にしてみたらどうでしょうか?
cakephpのAuthはデフォルトだとusernameとpasswordのカラムをチェックします。
なのでemailとpasswordでログインしたい場合は、下記が正しいです。
■PostControllerクラス
array('username' => 'email', 'password' => 'password') //フォームの値 => fields
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/12/17 21:34
仮にclass Userとしても「メールアドレスかパスワードが間違っています」と表示されます。
2015/12/20 07:33
クラス名はモデルの名前に合わせて下さい。
ちなみに、パスワードはハッシュされてますか?