CakePHP3系でEntityを使ってパスワードをハッシュ化する方法

CakePHP3CakePHP3


Warning: Undefined variable $content in /home/c9099599/public_html/dstrikes.net/wp-content/themes/cocoon-child-master/tmp/content.php on line 76
この記事は 約4 分で読めます。
スポンサーリンク

ハッシュ化とはなんぞや?

私もPHP初心者の頃はハッシュ化の意味は分かっていたけど使いどころが全然分かって居なかったのです。
簡単に言うとハッシュ化って言うのはMD5やSHA1みたいな事で要するに【暗号化】なわけです。
パスワードを暗号化するって言葉は良く聞くが、そもそもパスワードを暗号化してDBに登録したら暗号化後の文字列なんて記憶出来るわけないじゃないか?
と言う初歩の初歩的な所で引っかかっていたのです。

面白いのはこの暗号化。
MD5やSHA1は一般的に複合化出来ないとされています。
それだけに引っかかるポイントだったわけですが、複合化出来ないけど一定の文字列【ABC】を暗号化すると同じ暗号文字列に変わると言う事です。
この所が一番重要な部分でしたが、当時の私には全く理解出来ていませんでした。

要するにDBがSQLインジェクションなどによってハッキングされDBが丸見えになった際にもパスワードを暗号化していれば容易にはパスワードは漏れない(バレ)ないって事です。

CakePHP3のEntityで実装する

さてさて、パスワードをハッシュ化する意味が分かった所で、実際にパスワードをハッシュ化する方法を紹介したいと思います。
と言ってもCakePHP3Cookbookのチュートリアルをやれば普通にわかると思うんですが、やっぱりフレームワーク(FW)を実際に理解するには手を動かさないと理解出来ないわけです。
普通にPHPでやるなら簡単ですね。例えば・・・・文字列 ABCをハッシュ化したい場合なら

$password = md5('ABC');

とか、もっと複雑にしたければ

$password = md5(sha1('ABC'));

とやれば良いのです。

さてCakePHP3で実装するにはどうするのか。

namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher; // この行を追加してください
use Cake\ORM\Entity;

class User extends Entity
{

// bake で生成されたコード

protected function _setPassword($value)
{
$hasher = new DefaultPasswordHasher();
return $hasher->hash($value);
}
}

とすれば追加出来ちゃいます。

protected function _setPassword($value){

以降を追加すればOKです。
私がハマったのは ‘Cake\Auth\DefaultPasswordHasher;’を追加出来て無くて実行するとエラー連発してました。(笑

CakePHP3のルーティング

前の記事で静的ページを作る話をしましたが次はルートの話です。
例えば http://localhost/ にアクセスがあった場合 普通ならindex.html index.php のファイルが表示されて当然ですよね。
実際、Web制作のルールでそう言う風に決まってますよね。

さてCakePHP3のルート規則はroutes.phpに記載されてますし例外もここに書く事になってるようです。

$routes->connect('/', ['controller' => 'Pages', 'action' => 'home']);

上記の部分を弄る事でそれぞれルートを指定する事が出来るらしいのですが要するにこう言う事だそうです。

 

元々は action => ‘display’ , ‘home’ と指定されていますがこれはどういう事なんだ???
あ 間違い(苦笑

この最後の action => ‘home’ってなってるのは  src/Controller/PagesController.php の中の Function home() が参照されているそうです。

詳しくはCakePHP3の公式チュートリアルBookmarkでどうぞ。

PHPフレームワーク CakePHP 3入門

掌田 津耶乃 秀和システム 2017-01-14
売り上げランキング : 188707

by ヨメレバ