SimpleAuth 用法
如 Auth 套件中的 简介 所述,一套認證系统有三種不同的驅动,
每一種处理系统的一部分:
Simpleauth login 驅动提供了建立、更新、刪除和驗證儲存在本地資料庫表的使用者帳號、
取得關於那些帳號的資訊、產生或重設密码、
以及登入和登出操作(建立一个使用者 session)的邏輯。
Simpleauth group 驅动在 simpleauth 配置档案中儲存其群組定義。
它提供檢查使用者是否为群組中一員的邏輯,并且檢索群組資訊,或定義給群組的角色。
Simpleauth acl 驅动是角色驅动的,并在 simpleauth 配置档案儲存其 ACL 定義。
它提供檢查使用者是否有存取 ACL 具名權限的邏輯。
靜態 vs 动態
如同简介中所解釋,Auth 套件提供一个靜態介面让大多数方法可用,只提供你单一驅动組。
这些方法会在以下被定義为「靜態:是」。所有方法也可以经由 Auth 實例物件鍊結存取,
包括那些标記为靜態的。
类別方法
validate_user($username_or_email = '', $password = '')
validate_user 方法驗證使用者憑證。此方法支援 Email 和使用者名稱做为有效憑據。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$username_or_email |
''
|
使用者名稱或 Email 地址 |
$password |
''
|
使用者密码 |
|
回傳 |
混合。false 如果使用者沒通過驗證,或一个有該使用者資訊的陣列,如果憑證有效的話。 |
範例 |
// 驗證使用者名稱和密码
if ($user = Auth::validate_user($name, $pass))
{
// $name 和 $pass 的組合通過驗證,印出使用者名稱
echo $user['username'];
}
|
这个方法只驗證所給的使用者名稱及密码的組合是否正確。它不登入使用者!
login($username_or_email = '', $password = '')
login 方法执行一个登入請求。如果有參数沒給,它会试圖從 post 資料檢索,
使用配置在 simpleauth.php 配置档案中的表单欄位名稱。
在嘗试登入之前,內部它呼叫 validate_user() 方法來驗證請求。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$username_or_email |
''
|
使用者名稱或 Email 地址 |
$password |
''
|
使用者密码 |
|
回傳 |
布林。回傳 true 如果登入成功,否則是 false。 |
範例 |
// 执行登入
if (Auth::login($name, $pass))
{
// 該使用者成功登入
}
|
在成功登入後,'username' 和目前的 'login_hash' 将可用做一个 session 變数。
check()
check 方法檢查是否存在登入的使用者。
靜態 |
是 |
參数 |
無
|
回傳 |
布林。回傳 true 如果存在登入的使用者,否則是 false。 |
範例 |
// login 如果我們沒登入
if ( ! Auth::check())
{
Response::redirect('/login');
}
|
force_login($user_id = '')
force_login 方法执行一个強制登入請求。你可以用它來自动登入,
在你知道使用者 ID,但不知道密码時。例如,这可被用做一个「記住我」功能。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$user_id |
必要 |
你想要登入的使用者 ID |
|
回傳 |
布林。回傳 true 如果登入成功,否則是 false。 |
範例 |
// 为使用者 12121 执行強制登入
if (Auth::force_login(12121))
{
// 該使用者成功登入。任何先前登入的使用者会被登出!
}
|
logout()
logout 方法登出目前登入的使用者。
靜態 |
是 |
參数 |
無
|
回傳 |
布林。回傳 true 如果登入成功,否則是 false。 |
範例 |
// 执行登出
Auth::logout();
|
如果你已经啟用支援訪客使用者,訪客使用者将在成功登出之後被設置。
create_user($username, $password, $email, $group = 1, Array $profile_fields = array())
create_user 能让你在使用者資料表建立一筆新的使用者紀錄。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$username |
必要 |
你想要建立的使用者名稱 |
$password |
必要 |
你想要指派給該使用者的密码 |
$email |
必要 |
你想要建立的使用者 Email 地址 |
$group |
1 |
你想要指派此使用者的群組。預設情況下,使用者被指派到群組 1。 |
$profile_fields |
array()
|
你想要指派給此使用者的任何附加設定档欄位 |
|
拋出 |
SimpleUserUpdateException |
回傳 |
混合。回傳建立使用者紀錄的 ID,或 false 如果建立失敗。 |
範例 |
// 建立新使用者
Auth::create_user(
'anewuser',
'thisismysecretpassword',
'anewuser@example.org',
1,
array(
'fullname' => 'A. New User',
)
);
|
update_user($values, $username = null)
update_user 方法能让你更新使用者紀錄中的值,
無論是具名的,或目前登入的使用者。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$values |
array()
|
你想要更新的行或設定档欄位的行名/值配對的關聯陣列。 |
$username |
null
|
你想要更新的使用者的名稱 |
|
拋出 |
SimpleUserUpdateException |
回傳 |
布林。回傳 true 如果行被更新,或 false 如果沒有行被影響。 |
範例 |
// 为目前使用者更新資料
Auth::update_user(
array(
'email' => 'anewemail@example.org', // 設定一个新的 Email 地址
'password' => 'thisismynewpassword', // 設定一个新密码
'old_password' => 'thisismysecretpassword', // 要这樣做,給目前的密码!
'phone' => '+1 (555) 123-1212', // 并且添加電話號码到詮釋資料
)
);
|
这个方法主要是提供給使用者更新个人資料。并且做为安全措施,它不允許你變更使用者名稱,
而且如果你想變更密码,你必須在 $values 中傳遞目前密码做为 "old_password"。
change_password($old_password, $new_password, $username = null)
change_password 方法能让你變更一个使用者密码。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$old_password |
必要 |
使用者目前密码 |
$new_password |
必要 |
使用者新密码 |
$username |
null
|
你想要變更密码的使用者名稱 |
|
拋出 |
SimpleUserUpdateException |
回傳 |
布林。回傳 true 如果密码被變更,或 false 如果就密码不正確。 |
範例 |
// 为目前使用者變更密码
Auth::change_password('mycurrentpassword','mynewpassword');
|
这个方法是提供給使用者變更他的密码。并且做为安全措施,
你 必須 在 "old_password" 傳遞目前密码。
reset_password($username)
reset_password 方法能让你指派一个新的隨機密码給使用者。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$username |
必要 |
你想要重設密码的使用者名稱 |
|
拋出 |
SimpleUserUpdateException |
回傳 |
字串,產生的隨機密码。 |
範例 |
// 为目前使用者重設密码
$new_password = Auth::reset_password('thisusername');
|
delete_user($username)
delete_user 方法能让你刪除一个使用者帳號。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$username |
必要 |
你想要刪除的使用者帳號名稱 |
|
拋出 |
SimpleUserUpdateException |
回傳 |
布林。回傳 true 如果使用者帳號被刪除,或 false 如果失敗的話(因为使用者名稱不存在)。 |
範例 |
// 刪除使用者
Auth::delete_user('thisusername');
|
create_login_hash()
create_login_hash 方法为目前登入使用者產生一个新的登入雜湊。
靜態 |
是 |
參数 |
無
|
回傳 |
字串,產生的登入雜湊。 |
範例 |
// 產生一个新的隨機雜湊
Auth::create_login_hash();
|
这个方法通常用在使用者登入,但你可以使用它定期轉动登入使用者的雜湊,
來做为額外的安全措施。
請注意,登入雜湊保護在多个登入啟用時不会使用!
get($field, $default = null)
get 方法是使用者特性的通用 getter,無論是從使用者紀錄,或是從詮釋資料。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$field |
必要 |
你想要取得值的特性名稱 |
$default |
null
|
如果特性沒設定要回傳的值 |
|
回傳 |
混合。 |
範例 |
// 取得使用者建立日期
$created_at = Auth::get('created_at');
|
get_user_id()
get_user_id 方法回傳一个包含驅动 ID 值、以及目前登入使用者 ID 的陣列結構。
它使用这个結構因为你可以有多个活躍的 login 驅动,
每一个可以對目前登入使用者有不同 ID。
靜態 |
是 |
參数 |
無
|
回傳 |
混合。回傳一个 array([0]=>driver_id, [1]=>user_id) 形式的数字陣列如果使用者登入的話,否則是 false。 |
範例 |
// 取得所有登入 ID 資訊
$id_info = Auth::get_user_id();
// 印出驅动和 ID 資訊
if ($id_info)
{
foreach ($id_info as $info)
{
echo 'Driver: ',$info[0],' with ID ',$info[1],'<br />';
}
}
else
{
echo 'Nobody is logged in!';
}
// 如果你只使用一个驅动,你也可以这樣做
list($driver, $userid) = Auth::get_user_id();
// 或这樣如果你只需要 userid
list(, $userid) = Auth::get_user_id();
|
如果啟用訪客登入支援,你将永遠取不到 false 回傳,因为該方法将回傳訪客使用者的使用者 ID。
get_groups()
get_groups 方法回傳指派給目前登入使用者的群組。
靜態 |
是 |
參数 |
無
|
回傳 |
混合。回傳一个 array(array(driver, group_id)) 形式的陣列如果使用者登入的話,否則是 false。 |
範例 |
// 取得所有群組 ID 資訊
$id_info = Auth::get_groups();
// 印出驅动和 ID 資訊
if ($id_info)
{
foreach ($id_info as $info)
{
echo 'Driver: ',$info[0],' with group ID ',$info[1],'<br />';
}
}
else
{
echo 'Nobody is logged in!';
}
// 如果你只使用一个驅动,你也可以这樣做
list($driver, $groupid) = Auth::get_groups();
|
如果啟用訪客登入支援,你将永遠取不到 false 回傳,因为該方法将回傳訪客使用者的群組資訊。
get_email()
get_email 方法回傳指派給目前登入使用者的 Email 地址。
靜態 |
是 |
參数 |
無
|
回傳 |
混合。回傳一个 Email 地址如果使用者有登入,或 false 如果沒有使用者登入。 |
範例 |
// 取得目前使用者的 Email 地址
$email = Auth::get_email();
// 請注意,false 和 empty 之間有所不同:
if ($email === false)
{
// 沒有人登入
}
if (empty($email))
{
// 使用者已登入,但沒有 Email 地址
}
|
如果啟用訪客登入支援,你将永遠取不到 false 回傳,因为該方法将回傳訪客使用者的 Email 地址。
get_screen_name()
get_screen_name 方法回傳目前登入使用者的螢幕或顯示名稱。
靜態 |
是 |
參数 |
無
|
回傳 |
混合。回傳包含名稱的字串,或 false 如果沒有使用者登入。 |
範例 |
// 取得目前使用者的螢幕名稱
$name = Auth::get_screen_name();
// 名稱是必要的,所以如果沒出现,表示沒有人登入
if (empty($name))
{
// 沒有人登入
}
|
如果啟用訪客登入支援,你将永遠取不到 false 回傳,因为該方法将回傳訪客使用者的使用者名稱。
get_profile_fields($field = null, $default = null)
get_profile_fields 方法回傳登入使用者的一个或所有儲存个人設定欄位。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$field |
null
|
你想要取得个人設定欄位的名稱。 |
$default |
null
|
如果請求的个人設定欄位不存在時,你想要回傳的值。 |
|
回傳 |
混合 |
範例 |
// 取得所有定義的个人設定欄位
$profile = Auth::get_profile_fields();
|
member($group, $user = null)
member 方法能让你檢查使用者是否为所給群組的一員。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$group |
必要 |
你想要檢查成員資格的群組 ID |
$user |
null
|
指定的使用者,透過 get_user_id() 的結果識別,或 null 为目前登入的使用者。 |
|
回傳 |
布林。true 如果使用者是群組成員,否則是 false。 |
範例 |
// 檢查目前使用者是否为管理員
if (Auth::member(100))
{
// 我們在管理員群組!
}
|
groups($driver = null)
groups 方法能让你取回所有定義的群組,或所有定義在指定驅动中的群組。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$driver |
null
|
你想要從中取得群組的 group 驅动名稱 |
|
回傳 |
陣列。如果 group 驅动不存在或沒定義群組,会回傳空陣列。 |
範例 |
// 取得所有定義的群組(所有載入的 group 驅动)
$groups = Auth::groups();
// 從預設 group 驅动取得所有群組
$groups = Auth::group()->groups();
// 從指定驅动取得所有群組
$groups = Auth::group('Simplegroup')->groups();
|
如果你想要透過指定驅动定義群組,你需要在 Auth group 驅动實例呼叫此方法。
如果你使用多个驅动,此方法只適用於如果群組 ID 在所有驅动確實是唯一的!
roles($driver = null)
roles 方法能让你取回所有定義的角色,或所有定義在指定驅动中的角色。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$driver |
null
|
你想要從中取得角色的 group 驅动名稱 |
|
回傳 |
陣列。如果 acl 驅动不存在或沒定義角色,会回傳空陣列。 |
範例 |
// 取得所有定義的角色(所有載入的 acl 驅动)
$roles = Auth::roles();
// 從預設 acl 驅动取得所有角色
$roles = Auth::acl()->roles();
// 從指定驅动取得所有角色
$roles = Auth::acl('Simpleacl')->roles();
|
如果你想要透過指定驅动定義群組,你需要在 Auth acl 驅动實例呼叫此方法。
如果你使用多个驅动,此方法只適用於如果角色 ID 在所有驅动確實是唯一的!
get_name($group = null)
get_name 方法能让你取回指定群組的名稱。如果沒給 group,
它会回傳目前登入使用者的群組名稱。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$group |
null
|
你想要從中取得名稱的群組 ID |
|
回傳 |
混合。群組名稱,或 null 如果所給群組 ID 不存在。 |
範例 |
// 取得目前登入使用者所有群組的名稱
$name = Auth::group()->get_name();
// 取得來自指定驅动指定群組的名稱
$name = Auth::group('Simplegroup')->get_name(100); // 回傳 'Administrators'
|
如果你使用多个驅动,此方法只適用於如果群組 ID 在所有驅动確實是唯一的!
has_access($condition)
has_access 方法能让你檢查目前登入的使用者,是否有存取指定位置的指定權限。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$condition |
必要 |
你想要檢查的存取條件 |
|
回傳 |
布林。true 如果使用者可存取,否則为 false。 |
範例 |
// 檢查使用者是否有閱讀 blog 文章的存取權限
if (Auth::has_access('blog.read'))
{
// 是的,使用者可存取
}
// 如果你有多个實例,使用該實例呼叫此方法。
// 你也可以一次檢查多个權限
if (Auth::instance('simpleauth')->has_access('blog.[read,write,delete]'))
{
// 是的,使用者有閱讀、撰寫和刪除的存取權限
}
// 你也可以指定權限为陣列來檢查
if (Auth::has_access(array('blog' => array('read'), 'comments' => array('read')))
{
// 是的,使用者有閱讀 blog 和評論的存取權限
}
// 如果你有多个 login 實例,你也可以取指定的 ACL 驅动
if (Auth::acl('simpleacl')->has_access('blog.[read,write,delete]'))
{
// 是的,使用者有閱讀、撰寫和刪除的存取權限
}
|
guest_login()
guest_login 能让你檢查訪客存取是否啟用。
靜態 |
是 |
參数 |
無
|
回傳 |
布林。回傳 true 如果支援訪客啟用,否則是 false。 |
範例 |
// 重導到 login 如果我們要求一个使用者且訪客存取沒有啟用
if ( ! Auth::check() and ! Auth::guest_login())
{
Response::redirect('/login');
}
|
remember_me($user_id = null)
remember_me 方法能让你設定一个 remember_me cookie。如果沒給 $user_id,会使用目前登入的使用者。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$user_id |
null
|
要被記住的使用者 ID |
|
回傳 |
布林。回傳 true 如果記住我 cookie 有正確設定,或 false
如果沒有 user_id 存在,或 remember_me 功能在配置中被停用。
|
範例 |
// 处理登入表单 POST,并設定 remember-me cookie 如果需要
if (\Input::method() == 'POST')
{
// 檢查憑證。
if (\Auth::instance()->login(\Input::param('username'), \Input::param('password')))
{
// 使用者想被記住嗎?
if (\Input::param('rememberme', false))
{
// 建立 remember-me cookie
\Auth::remember_me();
}
else
{
// 如果存在,刪除 remember-me cookie
\Auth::dont_remember_me();
}
// 登入,往首頁去
\Response::redirect('/');
}
else
{
// 登入失敗,顯示一个错误訊息
$data['username'] = \Input::param('username');
$data['login_error'] = \Lang::get('login.failure');
}
}
|
dont_remember_me()
dont_remember_me 方法銷毀 remeber_me cookie,如果存在的話。