ã“ã®è¨˜äº‹ã§ã¯ã€è¤‡æ•°ã®ãƒã‚°ã‚¤ãƒ³æ©Ÿèƒ½ã‚’実装ã™ã‚‹æ–¹æ³•ã‚’紹介ã—ã¦ã„ã¾ã™ã€‚
ã¾ãŸã€ã“れらã¯åˆ¥ã€…ã®ãƒ†ãƒ¼ãƒ–ルã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆæƒ…å ±ã‚’ã‚‚ã£ã¦ã„ã‚‹ã‚‚ã®ã¨ã—ã¾ã™ã€‚
FuelPHPã®authパッケージã«ã¯ã€SimpleAuthã¨ã„ã†èªè¨¼ã‚’è¡Œã†ãŸã‚ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚ã‚Šã¾ã™ã€‚
今回ã¯ã€ã“ã®SimpleAuthã‚’æ‹¡å¼µã—ã¦å¯¾å¿œã—ã¦ã„ãã¾ã™ã€‚
今回ã¯ã€adminsã¨basesã®2ã¤ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ†ãƒ¼ãƒ–ルを作æˆã—ã¾ã™ã€‚
SimpleAuthã§ã¯ã€ä¸‹è¨˜ã®æ§‹æˆã§ä½œæˆã™ã‚‹ã“ã¨ã‚’推奨ã—ã¦ã„ã¾ã™ã€‚
SimpleAuthã«åˆã‚ã›ã¦åŒã˜ã‚ˆã†ã«ä½œæˆã—ã¾ã™ã€‚
CREATE TABLE `admins` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`password` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`group` INT NOT NULL DEFAULT 1 ,
`email` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`last_login` VARCHAR( 25 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`login_hash` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`profile_fields` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`created_at` INT( 11 ) UNSIGNED NOT NULL ,
UNIQUE (
`username` ,
`email`
)
)
CREATE TABLE `bases` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`password` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`group` INT NOT NULL DEFAULT 1 ,
`email` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`last_login` VARCHAR( 25 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`login_hash` VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`profile_fields` TEXT CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL ,
`created_at` INT( 11 ) UNSIGNED NOT NULL ,
UNIQUE (
`username` ,
`email`
)
)
fuel/app/config/config.phpを変更ã—ã¾ã™ã€‚
packagesã§authをコメントアウトã—ã¾ã—ょã†ã€‚
'packages' => array(
'auth'
),
auth.phpã‚’è¿½åŠ ã—ã¾ã™ã€‚
「fuel/packages/auth/config/auth.phpã€ã‚’「fuel/app/config/ã€ä»¥ä¸‹ã«ã‚³ãƒ”ーã—ã¦ãã ã•ã„。
ãã—ã¦ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ä¿®æ£ã—ã¾ã™ã€‚
ドライãƒã¯ã€Adminauthã¨Baseauthã®äºŒã¤ã‚’記述ã—ã¦ãã ã•ã„。
saltã¯ã€ãƒ‘スワードをãƒãƒƒã‚·ãƒ¥åŒ–ã™ã‚‹ã¨ãã«ä½¿ç”¨ã™ã‚‹ã®ã§ã€ä»»æ„ã®æ–‡å—列をè¨å®šã—ã¾ã—ょã†ã€‚
return array(
'driver' => array('Adminauth','Baseauth'),
'verify_multiple_logins' => false,
'salt' => 'fsjakl32K2inj9La',
'iterations' => 10000,
);
fuel/packages/auth/config/simpleauth.phpを以下ã«ãã‚Œãžã‚Œã‚³ãƒ”ーã—ã¦ãƒªãƒãƒ¼ãƒ ã—ã¾ã™ã€‚
「fuel/app/config/adminauth.phpã€
「fuel/app/config/baseauth.phpã€
以下ã®ã‚ˆã†ã«ã€Œtable_nameã€ã®å€¤ã‚’書ãã‹ãˆã¾ã™ã€‚
adminauth.phpã§ã¯ã€ã€Œadminsã€ã€baseauth.phpã§ã¯ã€ã€Œbasesã€ã§ã™ã。
'table_name' => 'admins',
ã¾ãŸã€ã€Œlogin_hash_saltã€ã®å€¤ã‚‚ä»»æ„ã®æ–‡å—列ã«å¤‰æ›´ã—ã¦ãã ã•ã„。
ã“ã“ã‹ã‚‰ã¯ãƒ‘ッケージを変更ã—ã¦ã„ãã¾ã™ã€‚
authパッケージã«ã¯ã€aclã€groupã€loginã®3種類ã‚ã‚Šã€ã“れらを拡張ã—ã¾ã™ã€‚
パッケージã£ã¦æ™®é€šã¯æ‰‹ã‚’åŠ ãˆãšã«åˆ©ç”¨ã™ã‚‹ã‚‚ã®ã§ã™ã‚ˆã。。。
ã“ã“を変更ã™ã‚‹ã®ã¯ã¨ã¦ã‚‚抵抗ãŒã‚ã‚Šã¾ã™ã€‚
ã§ã‚‚変更ã™ã‚‹ã—ã‹ãªã„ã®ã§ã™ã€‚
fuel/packages/auth/classes/auth/login/simpleauth.phpをコピーã—ã¦ã€åŒã˜éšŽå±¤ã«adminauth.phpã€baseauth.phpを作æˆã—ã¾ã™ã€‚
ãã‚Œãžã‚Œãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ã¦ã€ã€ŒSimpleã€ã‚’「Adminã€ï¼ˆBase)ã¸ã€ã€Œsimpleã€ã‚’「aminã€ï¼ˆbase)ã¸ç½®æ›ã—ã¾ã™ã€‚
大文å—・å°æ–‡å—を区別ã™ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
ã¾ãŸã€ã“ã“ã§ã¯sessionåを変更ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚
「¥Sessionã€ãªã©ã§æ¤œç´¢ã—ã€ã€Œusernameã€ã€Œlogin_hashã€ãªã©ã‚’「admin_usernameã€ï¼ˆbase_username)「admin_login_hashã€ï¼ˆbase_login_hash)ã«å¤‰æ›´ã—ã¾ã—ょã†ã€‚
作æˆã—ãŸãƒ†ãƒ¼ãƒ–ルã¨ã€Simpleauthã§æŽ¨å¥¨ã•ã‚ŒãŸãƒ†ãƒ¼ãƒ–ルã®æ§‹é€ ãŒç•°ãªã‚‹å ´åˆã€ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’変更ã—ã¾ã™ã€‚
例ãˆã°ã€adminsテーブルã«ã€Œemailã€ã®ã‚«ãƒ©ãƒ ãŒç„¡ã„å ´åˆã¯ã€adminauth.phpを編集ã—ã¦ä»¥ä¸‹ã®ç®‡æ‰€ã‚’コメントアウトã—ã¾ã™ã€‚
//validate_user メソッド
//->or_where('email', '=', $username_or_email)
//create_user メソッド
//->or_where('email', '=', $email)
複数端末ã‹ã‚‰åŒã˜IDを使用ã—ã¦ãƒã‚°ã‚¤ãƒ³ã‚’è¡Œã†å ´åˆã¯ä»¥ä¸‹ã®ã‚ˆã†ã«å¤‰æ›´ã—ã¦ãã ã•ã„。
通常ã§ã¯ã€ï¼‘ã¤ã®IDを使用ã—ã¦è¤‡æ•°ç«¯æœ«ã‹ã‚‰åŒæ™‚ãƒã‚°ã‚¤ãƒ³ãŒã§ãã¾ã›ã‚“。
public function create_login_hash()
{
if (empty($this->user))
{
throw new ¥SimpleUserUpdateException('User not logged in, can¥'t create login hash.', 10);
}
$last_login = ¥Date::forge()->get_timestamp();
//$login_hash = sha1(¥Config::get('simpleauth.login_hash_salt').$this->user['username'].$last_login);
$login_hash = sha1(¥Config::get('simpleauth.login_hash_salt').$this->user['username']); //.$last_login を削除
次ã«ã€fuel/packages/auth/classes/auth/group/simplegroup.phpをコピーã—ã¦ã€åŒã˜éšŽå±¤ã«admingroup.phpã€basegroup.phpを作æˆã—ã¾ã™ã€‚
ãã‚Œãžã‚Œãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ã¦ã€ã€ŒSimpleã€ã‚’「Adminã€ï¼ˆBase)ã¸ã€ã€Œsimpleã€ã‚’「aminã€ï¼ˆbase)ã¸ç½®æ›ã—ã¾ã™ã€‚
fuel/packages/auth/classes/auth/acl/simpleacl.phpをコピーã—ã¦ã€åŒã˜éšŽå±¤ã«adminacl.phpã€baseacl.phpを作æˆã—ã¾ã™ã€‚
ãã‚Œãžã‚Œãƒ•ã‚¡ã‚¤ãƒ«ã‚’編集ã—ã¦ã€ã€ŒSimpleã€ã‚’「Adminã€ï¼ˆBase)ã¸ã€ã€Œsimpleã€ã‚’「aminã€ï¼ˆbase)ã¸ç½®æ›ã—ã¾ã™ã€‚
å…ˆã»ã©è¿½åŠ ã—ãŸã€auth・group・aclã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’èªè¾¼ã‚€ã‚ˆã†ã«è¨å®šã—ã¾ã™ã€‚
fuel/packages/auth/bootstrap.phpã«ä»¥ä¸‹ã‚’追記ã—ã¦ãã ã•ã„。
'Auth\\Auth_Login_Adminauth' => __DIR__.'/classes/auth/login/adminauth.php',
'Auth\\Auth_Group_Admingroup' => __DIR__.'/classes/auth/group/admingroup.php',
'Auth\\Auth_Acl_Adminacl' => __DIR__.'/classes/auth/acl/adminacl.php',
'Auth\\Auth_Login_Baseauth' => __DIR__.'/classes/auth/login/baseauth.php',
'Auth\\Auth_Group_Basegroup' => __DIR__.'/classes/auth/group/basegroup.php',
'Auth\\Auth_Acl_Baseacl' => __DIR__.'/classes/auth/acl/baseacl.php',