行うためセキュリティはあまりよろしくないとのことなので、ダイジェスト認証ももしかしたらやるかも
しれない。やらないかもしれない。
参考サイト
認証用のユーザーを登録するテーブルを作る
多分usernameとpasswordカラムがあればなんとかなる。
/*---------------------------------------------------------------------------*/
CREATE TABLE IF NOT EXISTS admin_user (
username VARCHAR(64),
password VARCHAR(64)
);
/*---------------------------------------------------------------------------*/
でも大抵管理ページのユーザー管理用に使うと思うので、参考サイトのようにそれなりにデータは
持っておいたほうがいいかも。
モデルを作成する
作成したテーブルを操作するモデルを作ろう。
今回は作成したテーブルからしてCakePHPのデフォルトから外れているのでモデルも外れる。
/*---------------------------------------------------------------------------*/
class AdminUser extends AppModel {
public function beforeSave($options = array()) {
$password = &$this->data['User']['password'];
password = AuthComponent::password($password);
return true;
}
}
/*---------------------------------------------------------------------------*/
Authコンポーネントをコントローラに設定する前に、
このモデルを使用して管理ユーザーを作っておくことをオススメする。
パスワード照合の際はハッシュ化された文字列で行うので、テーブル側にもハッシュ化済みの
文字列が入っていないと認証に失敗するからだ。
Authコンポーネントを設定する
AppControllerにAuthコンポーネントを設定する。
/*---------------------------------------------------------------------------*/
class AppController extends Controller {
public $components = array(
"Session",
"Auth" => array(
"loginAction" => array(
"controller" => "AdminUser",
"action" => "login",
"admin" => true,
),
"loginRedirect" => array(
"controller" => "applies",
"actopm" => "index",
"admin" => true,
),
"authenticate" => array(
"Basic" => array("userModel" => "AdminUser"),
),
),
);
public function beforeFileter()
{
$this->Auth->logoutRedirect = $this->webroot;
}
}
/*---------------------------------------------------------------------------*/
loginActionのコントローラに次で作成するコントローラを指定。
認証用のモデルに作成しておいたモデルを指定。
ログイン用コントローラを作成する
ログイン処理用のコントローラ。
/*---------------------------------------------------------------------------*/
class AdminUserController extends AppController
{
public $uses = array("AdminUser");
public function login()
{
if($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
}
else {
$this->Session->setFlash(
__('Username or password is incorrect'),
'default',
array(),
'auth'
);
}
}
public function logout()
{
$this->Auth->logout();
}
}
/*---------------------------------------------------------------------------*/
参考サイトをほぼもろパクリさ! 違いと言えばコントローラとモデル名?
これでちゃんとユーザーを作っていればBASIC認証ができるようになったはず。
0 件のコメント:
コメントを投稿