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

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

ただいまの
回答率

90.42%

  • PHP

    21814questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    6344questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • CakePHP

    2417questions

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

  • phpMyAdmin

    719questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

CakePHPでログイン機能を作ったがpasswordがハッシュ化されない。ログインできない。

解決済

回答 1

投稿

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

inko

score 6

前提・実現したいこと

[CakePHP超入門』を勉強中なのですが、6章374Pのログイン機能の作成をしているのですが、管理用のアカウントの登録はできたのですが、その後のログインができません。後、パスワードが暗号化されると書いてあったのですが、全く暗号化されません。
助けて下さい。お願いします。

該当のソースコード

UsersController.php

<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\Auth\DefaultPasswordHasher;
use Cake\Event\Event;

/**
 * Users Controller
 *
 * @property \App\Model\Table\UsersTable $Users
 *
 * @method \App\Model\Entity\User[]|\Cake\Datasource\ResultSetInterface paginate($object = null, array $settings = [])
 */
class UsersController extends AppController
{

    public function initialize()
    {
      parent::initialize();
      //各種コンポーネントのロード
      $this->loadComponent('RequestHandler');
      $this->loadComponent('Flash');
      $this->loadComponent('Auth',[
        'authorize' => ['Controller'],
        'authenticate' => [
          'Form' => [
            'fields' => [
              'username' => 'username',
              'password' => 'password'
            ]
          ]
        ],
        'loginRedirect' => [
          'controller' => 'Users',
          'action' => 'login'
        ],
        'logoutRedirect' => [
          'controller' => 'Users',
          'action' => 'logout',
        ],
        'authError' => 'ログインしてください。',
      ]);
    }

    //ログイン処理
    function login(){
      //POST時の処理
      if($this->request->isPost()){
        $user = $this->Auth->identify();
        //Authのidentifyをユーザーに設定
        if(!empty($user)){
          $this->Auth->setUser($user);
          return $this->redirect($this->Auth->redirectUrl());
        }
        $this->Flash->error('ユーザー名かパスワードが間違っています。');
      }
    }

    //ログアウト処理
    public function logout(){
      //セッションを破壊
      $this->request->session()->destroy();
      return $this->redirect($this->Auth->logout());
    }

    //認証を使わないページの設定
    public function beforeFilter(Event $event){
      parent::beforeFilter($event);
    $this->Auth->allow(['login','index','add']);//後で'add'を削除する
    }

    //認証時のロールのチェック
    public function isAuthorized($user = null){
      //管理者はtrue
      if($user['role'] === 'admin'){
        return true;
      }
      //一般ユーザーはfalse
      if($user['role'] === 'user'){
        return false;
      }
      //他は全てfalse
      return false;
    }


login.ctp

<div class="users form">
  <?= $this->Flash->render('auth') ?>
  <?= $this->Form->create() ?>
  <fieldset>
    <legend>アカウント名とパスワードを入力して下さい。</legend>
    <?= $this->Form->input('username') ?>
    <?= $this->Form->input('password') ?>
  </fieldset>
  <?= $this->Form->button(__('login')); ?>
  <?= $this->Form->end() ?>
</div>

試したこと

app.phpのデータベースのパスワードじゃないとダメかと思い、それで登録しましたが、解決しませんでした。
後、パスワードをハッシュ化させるとログインできるかもとのことで、ハッシュ化のコードを書いてみましたが、エラーが発生しました。

補足情報(FW/ツールのバージョンなど)

Mac, MAMP, PHP7.2

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • mosaxiv

    2019/01/11 17:08

    もう少し具体的にお願いします!

    > 管理用のアカウントの登録はできたのですが、その後のログインができません。後、パスワードが暗号化されると書いてあったのですが、全く暗号化されません。
    →これはDBにには保存されているけどパスワードには平文が保存されているということですか?

    > その後のログインができません
    →これは $this->Flash->error('ユーザー名かパスワードが間違っています。'); このメッセージが出力されているということであっていますか?

    キャンセル

  • inko

    2019/01/11 17:10

    ご返事ありがとうございます!
    その通りです。DBには保存できています。
    ログインできない時のメッセージが出力されます。

    キャンセル

  • inko

    2019/01/11 17:11

    パスワードは平文です。暗号化されません。

    キャンセル

回答 1

checkベストアンサー

+1

おそらくパスワードのハッシュ化が出来ていないので以下のようにsrc/Model/Entity/User.phpに処理を追加する必要があります。
https://book.cakephp.org/3.0/ja/tutorials-and-examples/cms/authentication.html#id1

ちなみに上記コードはデータ登録時にパスワードをハッシュ化するので既存のデータは削除してユーザ登録処理からやり直してください。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/11 17:19

    ありがとうございます!
    無事暗号化して、ログインもできました!
    本当に助かりました!ありがとうございます!

    キャンセル

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

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

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

  • PHP

    21814questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    6344questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • CakePHP

    2417questions

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

  • phpMyAdmin

    719questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。