当前位置: 首页 > 文档资料 > FuelPHP 中文文档 >

用法 - SimpleAuth - Auth 套件

优质
小牛编辑
123浏览
2023-12-01

如 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 地址
$group1你想要指派此使用者的群组。预设情况下,使用者被指派到群组 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,如果存在的话。

静态
参数
範例範例见 remember_me()