SimpleAuth - 简介
Simpleauth,正如它的名字所暗示的,是一个被包含在 Auth 套件的简易認證系统。 除了做为一个运行中的 Auth 實现,也是其他 Auth 驅动程序的範例。 當建立自己的驅动程序時,你可以做为參考使用。
Auth 設置
配置開始於告知 Auth 套件你即将使用 Simpleauth 驅动。 这是透過 auth.php 配置档案做到。預設档案在 Auth 套件中被提供。 在做任何變更前,你應該複製此档案到你的 app/config 文件夾。 預設档案已经为 Simpleauth 套件配置。你将在此配置档案的这裡找到說明。
在你完成後,你可以選擇透過 app/config/config.php 的 always_load 段落來自动載入套件。
ACL
SimpleAuth 配備一个支援以下 ACL 結構的 ACL 驅动:
- 每个使用者是一个群組(對,就是一个)的一員
- 每个群組可以有零个或多个指派給它的角色
- 每个角色可以有零个或多个指派給它的權限
當檢查存取時,你指定所需的存取为 role.right
當你想要檢查单一權限,
或 role.[right,right]
當你想要一次檢查多个權限。这是一个 AND 檢查,
所以當你指定多个權限時,該使用者必須要有全部指派權限才能授权存取。
配置
SimpleAuth 認證系统是透過一个配置档案來配置,不意外地稱为 'simpleauth.php'。 預設档案在 Auth 套件中有提供。 在你做任何變更前,你應該複製該档案到你的 app/config 文件夾。
以下配置值可以被定義:
參数 | 类型 | 預設 | 描述 |
---|---|---|---|
db_connection | 字串 |
|
要使用的資料庫連線名稱。这應該與你应用程序 db.php 配置档案中的定義相符。 設定它为 null 以使用預設 DB 實例。 |
table_name | 字串 |
|
要使用的使用者資料表名稱。 |
table_columns | 陣列 |
|
要從使用者資料表選擇的行列表,或 '*' 來選擇所有行。你必須至少包含 'username'、'password'、'email'、'last_login'、'login_hash'、'group' 和 'profile_fields'。 |
guest_login | 布林 |
|
如果为 true,如果沒有登入,假的 'guest' 使用者会被建立。 这能让你在沒登入時使用群組和 acl 驅动。 |
remember_me | 陣列 |
|
給 Simpleauth 'remember_me' 功能的配置 |
multiple_logins | 布林 |
|
如果为 true,多个相同使用者同時登入是允許的。如果为 false,當一个使用者登入,任何先前的登入会被取消。 注意啟用这会停用一些登入 session 劫持的對策! |
groups | 陣列 |
|
定義的群組,被 SimpleAuth groups 驅动所使用。 群組陣列結構的敘述,詳見預設配置档案。 |
roles | 陣列 |
|
定義的角色,被 SimpleAuth acl 驅动所使用。 角色陣列結構的敘述,詳見預設配置档案。 |
login_hash_salt | 字串 |
|
为了让 SimpleAuth 驅动使用的密码額外安全, 一个鹽值被用在儲存密码進資料庫時雜湊他們。確保你變更預設值为一个非常隨機的字串! 为了雜湊密码,SimpleAuth 使用 PBKDF2,一个非常安全的雜湊機制。 |
username_post_key | 字串 |
|
在登入表单上包含使用者名稱的輸入欄位名稱。 |
password_post_key | 字串 |
|
在登入表单上包含密码的輸入欄位名稱。 |
如果你想要使用 'remember-me' 功能,確保你有一个有效的 Crypt 配置, 因为它使用一个加密的 cookie 來儲存要被記憶的使用者資訊。
資料庫表
SimpleAuth 依賴一張資料表,Auth 套件包含要建立此資料表所需的迁移档案。
只要运行 oil refine migrate --packages=auth
來为你建立該資料表。
範例
这是一个简单的登入动作:
public function action_login()
{
$data = array();
// 如果你按下提交按鈕,让我們跑整个步驟。
if (Input::post())
{
// 檢查認證,这裡假設你已经建立上表,且
// 你已经使用如上所述的資料表定義和配置。
if (Auth::login())
{
// 認證成功,進入。
Response::redirect('success_page');
}
else
{
// 哎呀,沒你的湯,再试著登入一次。設定一些值來
// 重填使用者名稱欄位,并給一些错误的文字到檢視。
$data['username'] = Input::post('username');
$data['login_error'] = 'Wrong username/password combo. Try again';
}
}
// 顯示登入表单。
echo View::forge('auth/login',$data);
}