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

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

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

1358閲覧

CakePHP2.6.13でログイン認証

sanagi_com

総合スコア12

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/02/07 01:25

編集2017/02/07 05:53

https://teratail.com/questions/17920
こちらの質問と同じなのですが、ログイン処理ができずに困っています。

ユーザー登録はできるのですが、ログインができません。
ソースコードは上記の質問者の方と同じですが、ユーザー名とパスワードはAuthコンポーネントのデフォルトのものを使っているので、mail_addressをusernameにしてあります。

解決方法が分かる方いらっしゃいましたらよろしくお願いします。

追記:
失礼しました。
エラーメッセージは出ていません。
前の片と同じようにUsersController.php中の、//Does not work wellのところでつまづいています。
Errorと出力されるだけです。

OSはwindows7、DBはxamppからphpMyAdminでMySQLを使用しています。

テーブルは下記の通り作成しました。

CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255),
password VARCHAR(255),
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);

追記2:
すみませんが、debug_kitとは何でしょうか?
CakePHPのプラグイン等でしたら入れていません。

追記3:
logファイルは質問をする前に一度消しましたが、その後はログインを試した後でもlogファイルは出力されていませんでした。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kunai

2017/02/07 01:59

「出来ない」だけだと何が起こっているのかわかりませんので、もう少し詳細に記載をお願いします。エラーメッセージなどが出ているのであれば、そのメッセージも提示ください。また、同じソースコードで一方だけ不具合があるとなると環境に依存する可能性も高いため、OSやDB、テーブル構造等も記載いただけますか
popobot

2017/02/07 03:26

debug_kitのSQLタブをみると認証のためのSQLがありますが、どうなっていますか
kunai

2017/02/07 05:43

cakephpのフォルダの、app\tmp\logs\error.log には何かエラーが書かれていませんか?
popobot

2017/02/07 06:16

debug_kitは入れましょう。Cakephp標準のデバッグツールです。
guest

回答2

0

ベストアンサー

debug_kitはエラーを表示するものではありません。各種変数や実際に実行されたSQLなどが閲覧できます。これによって、Cakephp内部でどういったことが起きているかデバックすることができます。

本題に戻りますが、debug_kit入れたのであれば、SQLタブを見てみてください。login()時にはユーザ名とパスワードが一致するユーザがいるか確認するSQLが実行されます。そのSQLは想定した内容になっていますか。また、SQLの結果該当ユーザがヒットしていますか。確認してみてください。

※パスワードの暗号化とかがうまく行っていないとかではないかと推測しています。

投稿2017/02/07 14:36

popobot

総合スコア6586

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanagi_com

2017/02/08 01:30

回答ありがとうございます。 Sql Logタブには何も表示されていません。 先の回答者様にいただいたURL通りに設定しましたが、何か間違ってしまったのではと思います…。 debug_kitの使用方法をもう一度見てみます。
popobot

2017/02/08 02:36

他のページとかではSQLが表示されますか? されるようならSQL自体実行されていないので設定の問題かもしれませんね
sanagi_com

2017/02/08 02:49

addページで確認してみましたが、やはりSQLは表示されませんでした。 実行後というか、INSERTされた後にそのSQLが表示されるという認識で合っていますか? もう少し調べてできないようであればゼロからやり直しも考えようと思います。
popobot

2017/02/08 03:24

そのページのコントローラ内で実行されたSQL(SELECTもINSERTもUPDATEもDELETE)が表示されるはずです。ただ、リダイレクトしてしまうとリダイレクト先のページのSQLしか表示されません。Errorのときはリダイレクトしないから表示されそうですけどね...
sanagi_com

2017/02/10 10:18

結局解決には至りませんでした。 もう一度やり直してみます。 ありがとうございました。
popobot

2017/02/10 10:27

時間があったら、手元の環境でもちょっと検証してみますね
popobot

2017/02/10 13:33 編集

UsersControllerの以下の記述を public $components = Array('Session', 'Auth'); 以下に変えたらうまくいきましたよ public $components = Array('Session'); なお、app/Model/User.phpはマニュアルのようにbeforeSaveでpasswordを暗号化する必要があります https://book.cakephp.org/2.0/ja/tutorials-and-examples/blog-auth-example/auth.html#id3 ※ここのマニュアルを読んでその通りに書けばとりあえずできると思いますけどね
sanagi_com

2017/02/13 02:49

遅くなりまして申し訳ありません。 ご指摘の通り、 public $components = Array('Session'); に変えて実行しましたら期待通りの動作になりました。 最初はそのマニュアル通りにしてみたのですが上手くいかず、変えて試していたんですが、今思えばどこかにミスがあったのだと思います。 SQLログも、参考にしていた方のソースをそのまま使っていたので、AppControllerの Configure::write('debug', 2); を Configure::write('debug', 1); に 変更したら表示されました。 もっと理解を深めるべきですね。 マニュアルを読み直します。 長い間、ご丁寧にありがとうございました!
popobot

2017/02/13 03:03

解決してよかったです! なるほどdebug=1だったんですね... そこには気が付きませんでいた。 debug_kitはとても使えるので普段から使うといいと思いますよ。
guest

0

まず、debug_kitは入れた方がいいです。
入れ方は、下記を参照してください。
http://qiita.com/BUN/items/403cccad9eaa831e6fd8

debug_kitをインストールすれば、debug()が使えるのでデバッグに便利です。

あと、core.php の「debug」が「0」なら「2」に変更してみてください。
debug=2で開発モードになるので、詳細なエラーが表示されます。

投稿2017/02/07 06:33

adimus

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanagi_com

2017/02/07 06:56

回答ありがとうございます。 debug_kitを入れてみましたが、何もタブにエラーは表示されず… core.php のdebugはもともと2でした。
adimus

2017/02/07 09:17

他の方と同じく、コードを見ないと何とも言えないところです。 AppControllerのAuthComponentの設定とUsersControllerを見せてください。 あとは、止まっていると分かっている $this->Auth->login() ここを debug($this->Auth->login()); するとエラーの詳細が分かるかもしれません。
sanagi_com

2017/02/08 01:18

ありがとうございます。 コードは質問文通りです。 debug_kitのツールバー追加とusernameへの変更以外はありません。 ・AppControllerのAuthComponentの設定 public $components = array( 'DebugKit.Toolbar', 'Auth' => array( 'loginAction' => array( 'controller' => 'users', 'action' => 'login' ), 'loginRedirect' => array( 'controller' => 'members', 'action' => 'index' ), 'logoutRedirect' => array( 'controller' => 'mains', 'action' => 'index', 'home' ), 'authenticate' => array( 'Form' => array( 'passwordHasher' => 'Blowfish', 'hashType' => 'sha1', 'fields' => array( 'username' => 'username', 'password' => 'password') ) ) ) ); ・UsersController <?php App::uses('AppController', 'Controller'); class UsersController extends AppController { public $name = 'Users'; public $components = Array('Session', 'Auth'); public function login() { if ($this->request->is('post')) { if ($this->Auth->login()) {//Does not work well echo "Hello, world"; $this->redirect($this->Auth->redirectUrl()); } else { echo "Error"; $this->Session->setFlash('Wrong email address or password', 'default', array(), 'auth'); } } } public function logout() { $this->Auth->logout(); //turn $this->redirect(array('action'=>'index', 'controller'=>'Members')); } public function add() { if (!empty($this->data)) { if ($this->data) { $this->User->create(); $this->User->save($this->data); $this->redirect(array('action' => 'login')); } } } public function beforeFilter() { $this->Auth->allow('add', 'logout'); } } debug($this->Auth->login()); このようにした場合、画面やLogタブに何か表示されるものでしょうか? 画面にfalseと表示されるのみでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問