「CakePHP3」ユーザー登録関連を編集、パスワードをハッシュ化する方法【入門】

カテゴリー:PHP

前回、作成したテーブル関連のコード生成をBakeコマンドで一気に行ったので、今回はsrcフォルダ以下のUsers関連を編集してパスワードのハッシュ化などを行っていきます。

今回のページでは、パスワードのハッシュ化関連から下記の1項目をまとめています。

  • 「CakePHP3でパスワードのハッシュ化をする方法」

CakePHP3でパスワードのハッシュ化をする方法

まず、MAMPを起動して、「http://localhost/cms/users/add」にアクセスをします。

下記画像の画面が表示されるので、適当なメールアドレスとパスワードを入力してユーザーを一人追加します。

CakePHP3でパスワードのハッシュ化をする方法

SUBMITボタンを押すとエラーがなければ「http://localhost/cms/users」に画面遷移がされて登録したユーザーが表示されているはずです。

ユーザー情報の「Password」は入力した値がそのまま表示されているはずです。今回は、これをハッシュ化できるように設定していきます。

編集するファイルは下記のファイルです。

src/Model/Entity/User.php

追加するコードは下記の2個です。

use Cake\Auth\DefaultPasswordHasher;
    protected function _setPassword($value)
    {
        if (strlen($value)) {
            $hasher = new DefaultPasswordHasher();

            return $hasher->hash($value);
        }
    }

追加後のsrc/Model/Entity/User.phpは下記のようになります。

<?php
namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher; // ここに追加
use Cake\ORM\Entity;


/**
 * User Entity
 *
 * @property int $id
 * @property string $email
 * @property string $password
 * @property \Cake\I18n\FrozenTime $created
 * @property \Cake\I18n\FrozenTime $modified
 *
 * @property \App\Model\Entity\Article[] $articles
 */
class User extends Entity
{

    /**
     * Fields that can be mass assigned using newEntity() or patchEntity().
     *
     * Note that when '*' is set to true, this allows all unspecified fields to
     * be mass assigned. For security purposes, it is advised to set '*' to false
     * (or remove it), and explicitly make individual fields accessible as needed.
     *
     * @var array
     */
    protected $_accessible = [
        'email' => true,
        'password' => true,
        'created' => true,
        'modified' => true,
        'articles' => true
    ];

    /**
     * Fields that are excluded from JSON versions of the entity.
     *
     * @var array
     */
    protected $_hidden = [
        'password'
    ];

    // ここに追加
    protected function _setPassword($value)
    {
        if (strlen($value)) {
            $hasher = new DefaultPasswordHasher();

            return $hasher->hash($value);
        }
    }
}

追加したDefaultPasswordHasherクラスは「bcrypt」でデータをハッシュ化してくれます。

ハッシュ化の方法はたくさんありますが、今現在CakePHP3では「bcrypt」が推奨されています。ちなみに、bcryptの読み方は「ビークリプト」です。

上記コードを追加後http://localhost/cms/usersページの右側の「Actions」から「Edit」を選択してユーザー情報のパスワードを編集すると、一覧で表示されるパスワードがハッシュ化されたものに変わります。

これでパスワードのハッシュ化処理の完了です。

参考:CakePHP3クイックスタートガイド「CMS チュートリアル – 認証」


タグ

関連する投稿

ドラクエ好きな社会保険労務士有資格者・ファイナンシャルプランナー技能士検定2級正会員が運営をしています。当ブログではDQMSLを中心にWordPress・HTML・CSS・JS・PHPなどのTips備忘記録や資格関連の情報、その他雑記を発信して行きます。