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

简介 - SimpleAuth - Auth 套件

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

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字串
null
要使用的资料库连线名称。这应该与你应用程序 db.php 配置档案中的定义相符。 设定它为 null 以使用预设 DB 实例。
table_name字串
'users'
要使用的使用者资料表名称。
table_columns阵列
array('*')
要从使用者资料表选择的行列表,或 '*' 来选择所有行。你必须至少包含 'username'、'password'、'email'、'last_login'、'login_hash'、'group' 和 'profile_fields'。
guest_login布林
true
如果为 true,如果没有登入,假的 'guest' 使用者会被建立。 这能让你在没登入时使用群组和 acl 驱动。
remember_me阵列
array(
	'enabled' => false,
	'cookie_name' => 'rmcookie',
	'expiration' => 86400*31
)
给 Simpleauth 'remember_me' 功能的配置
multiple_logins布林
false
如果为 true,多个相同使用者同时登入是允许的。如果为 false,当一个使用者登入,任何先前的登入会被取消。 注意启用这会停用一些登入 session 劫持的对策!
groups阵列
array()
定义的群组,被 SimpleAuth groups 驱动所使用。 群组阵列结构的叙述,详见预设配置档案。
roles阵列
array()
定义的角色,被 SimpleAuth acl 驱动所使用。 角色阵列结构的叙述,详见预设配置档案。
login_hash_salt字串
'put_some_salt_in_here'
为了让 SimpleAuth 驱动使用的密码额外安全, 一个盐值被用在储存密码进资料库时杂凑他们。确保你变更预设值为一个非常随机的字串! 为了杂凑密码,SimpleAuth 使用 PBKDF2,一个非常安全的杂凑机制。
username_post_key字串
'username'
在登入表单上包含使用者名称的输入栏位名称。
password_post_key字串
'password'
在登入表单上包含密码的输入栏位名称。

如果你想要使用 '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);
}