gori0i9a9925_tp_v

パスワードのHash化

CakePHP3でAuthコンポーネントを使用するとデフォルトでパスワードがHash化されているものとして処理されます。

ここでは暗号化していない平のパスワードでの認証を行う方法を紹介します。
これを応用する事でHash化ではない別の暗号化でパスワードを管理する事が可能です。

実装方法

Authコンポーネントを下記の通りAppController.phpのinitializeに定義します。

AppController.php

    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');

        $this->loadComponent('Auth', [ // Authコンポーネントの読み込み
                    'authenticate' => [
                        'Form' => [ // 認証の種類を指定。Form,Basic,Digestが使える。デフォルトはForm
                            'userModel' => 'Users', //認証に使用するテーブル名
                            'fields' => [ // ユーザー名とパスワードに使うカラムの指定。省略した場合はusernameとpasswordになる
                                'username' => 'username', // ユーザー名のカラムを指定
                                'password' => 'password' //パスワードに使うカラムを指定
                            ],
                            'passwordHasher' => ['className' => 'None'],
                        ]
                    ],
                    'loginRedirect' => [ // ログイン後に遷移するアクションを指定
                        'controller' => 'orders',
                        'action' => 'index'
                    ],
                    'logoutRedirect' => [ // ログアウト後に遷移するアクションを指定
                        'controller' => 'Users',
                        'action' => 'login',
                    ],
                    'authError' => 'ログインできませんでした。ログインしてください。', // ログインに失敗したときのFlashメッセージを指定(省略可)
                ]);
    }

ポイントは赤字の部分です。
このように記述する事で認証時のパスワードの確認ロジックを指定出来ます。
この記述で「sec/Auth/NonePasswordHasher.php」を参照して認証を行います。
下記の通りNonePasswordHasher.phpを作成します。

sec/Auth/NonePasswordHasher.php

namespace App\Auth;

use Cake\Auth\AbstractPasswordHasher;


class NonePasswordHasher extends AbstractPasswordHasher {
    protected $_config = array('hashType' => null);

    public function hash($password) {
        return $password;
    }

    public function check($password, $hashedPassword) {
                //$hashedPassword 認証フォームで入力されたパスワード
                //$hashedPassword DBに登録してあるpassword

                return $hashedPassword === $password;
    }
}

hash() と check()メソッドを実装します。
checkメソッドでHashでは無い任意の暗号処理を実装する事が可能です。

Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on Yummly0