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

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

ただいまの
回答率

90.34%

  • CakePHP

    2388questions

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

CakePHP2.6.13でログイン認証

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 417

sanagi_com

score 4

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ファイルは出力されていませんでした。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • kunai

    2017/02/07 10:59

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

    キャンセル

  • popobot

    2017/02/07 12:26

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

    キャンセル

  • kunai

    2017/02/07 14:43

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

    キャンセル

  • popobot

    2017/02/07 15:16

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

    キャンセル

回答 2

checkベストアンサー

+1

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

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/02/08 10:30

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

    キャンセル

  • 2017/02/08 11:36

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

    キャンセル

  • 2017/02/08 11:49

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

    キャンセル

  • 2017/02/08 12:24

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

    キャンセル

  • 2017/02/10 19:18

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

    キャンセル

  • 2017/02/10 19:27

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

    キャンセル

  • 2017/02/10 19:30 編集

    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
    ※ここのマニュアルを読んでその通りに書けばとりあえずできると思いますけどね

    キャンセル

  • 2017/02/13 11:49

    遅くなりまして申し訳ありません。
    ご指摘の通り、
    public $components = Array('Session');
    に変えて実行しましたら期待通りの動作になりました。

    最初はそのマニュアル通りにしてみたのですが上手くいかず、変えて試していたんですが、今思えばどこかにミスがあったのだと思います。
    SQLログも、参考にしていた方のソースをそのまま使っていたので、AppControllerの
    Configure::write('debug', 2); を
    Configure::write('debug', 1); に
    変更したら表示されました。

    もっと理解を深めるべきですね。
    マニュアルを読み直します。
    長い間、ご丁寧にありがとうございました!

    キャンセル

  • 2017/02/13 12:03

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

    キャンセル

0

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

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/02/07 15:56

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

    キャンセル

  • 2017/02/07 18:17

    他の方と同じく、コードを見ないと何とも言えないところです。
    AppControllerのAuthComponentの設定とUsersControllerを見せてください。

    あとは、止まっていると分かっている
    $this->Auth->login()
    ここを
    debug($this->Auth->login());
    するとエラーの詳細が分かるかもしれません。

    キャンセル

  • 2017/02/08 10: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と表示されるのみでした。

    キャンセル

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

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

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

  • CakePHP

    2388questions

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