DX Auth User Guide Version 1.0 参考手册
原文:http://dexcell.shinsengumiteam.com/dx_auth/index.html
欢迎使用 DX Auth
DX Auth 是一个CodeIgniter(PHP框架)的身份验证库。她的目标是是你容易地实现安全,容易的在你的项目中使用身份验证库,同时给你选择简单验证系统 或全能验证系统的灵活性。
DX Auth 是以国际化思路构建的,所以所有的字符串都是在语言文件中可用的。(除了捆绑的示例,因为那时你的代码而不是库)。
它由 Jason Ashdown 基于 CL Auth 0.2.5 开发。
DX Auth的特色有哪些?
基本验证(登录,注销,注册,修改密码)。
记住我。
使用用户名或E-mail或两者登录(依赖于你的配置)。
忘记密码。
踢人。
最后登录的IP地址和时间(可选)。
E-mail 激活(可选)。
用户档案(可选)。
基于角色(管理员,用户,版主,等)。也支持继承(可选)。
基于URI和角色限制页面访问(可选)。
为每个角色自定义权限(可选)。
登录尝试(可选)。你可以使用它在指定的尝试次数后显示验证码以阻止机器人。
事件(例如:你可以自己加上在用户激活后发送欢迎站内信的代码)。
验证码(可选,自带的和reCAPTICHA均可用)。
简单的管理员面板(这样你可以对它自定义,把它包含进你自己的管理员面板,或者如果你不需要就删了它)。
多数特性是可选的,意味着你可以在配置文件里把它关掉,删掉,或放着不用它。
CL Auth 0.2.5 后的更新
如果你以前用过 CL Auth,你或许想知道在 CL Auth 0.2.5 后有些什么更新。
Bug 修正。
添加、修改函数
修改了代码结构
组改为角色
直接与 CI 绑定的 session 兼容
为国际化添加语言文件
所有的函数命名以 “lower_case” 风格取代了“camelCase”风格。
源代码书写遵循 CI 用户手册规范
添加源代码注释,这样你可以容易地跟进。
带有详细解释的 CodeIgniter 风格用户手册。
还有其他一些我忘了的鸟...
看起来挺好,从哪儿开始呢?请阅读“开始”或者看示例。
DX Auth 在 CI 1.7.0 下测试通过,但在以前版本中应该也可以使用。
CodeIgniter DX Auth 插件安装
原文:http://dexcell.shinsengumiteam.com/dx_auth/installation/index.html
下载 DX Auth
点此下载 官方页面:http://dexcell.shinsengumiteam.com/dx_auth/installation/downloads.html
安装说明
安装带有示例的 DX Auth
- 将压缩包解压。
- 复制 captcha 文件夹到你的 CI 文件夹。让 Web 服务器对此文件夹可写。
- 复制 application 文件夹到你的 CI application 文件夹。
- 将 DX Auth 的数据库结构安装到你的数据库。
- 打开 application/config/config.php。修改 $config['sess_use_database'] 为 TRUE。
只安装 DX Auth 库
- 将压缩包解压。
- 复制 captcha 文件夹到你的 CI 文件夹。让 Web 服务器对此文件夹可写。
- 复制 application/plugins/ 文件夹到你的 CI application/plugins/ 文件夹。
- 复制 application/config/ 文件夹到你的 CI application/config/ 文件夹。
- 复制 application/libraries/ 文件夹到你的 CI application/libraries/ 文件夹。
- 复制 application/helpers/ 文件夹到你的 CI application/helpers/ 文件夹。
- 复制 application/models/ 文件夹到你的 CI application/models/ 文件夹。
- 复制 application/language/ 文件夹到你的 CI application/language/ 文件夹。
- 将 DX Auth 的数据库结构安装到你的数据库。
- 打开 application/config/config.php。修改 $config['sess_use_database'] 为 TRUE。
搞定!
如果你初学 DX Auth,请阅读用户手册的开始章节以开始使用 DX Auth。
数据库结构
下面是 DX Auth 库所需的数据库结构,或者你也可以在下载 zip 文件并解压后从 'schema.sql' 中找到它。
这将安装:
- 名为 'ci_sessions' 的 CI Session 表。如果在你的数据库中已经有这个表你可以删掉 'ci_session' 的安装脚本。
- DX Auth 库表。
- 具有管理员角色的用户,用户名:admin,密码:hello。
- 具有用户角色的用户,用户名:user,密码:hello。
- role_table 中的默认角色(用户和管理员)。
SET
SQL_MODE
=
"
NO_AUTO_VALUE_ON_ZERO
"
;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */
;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */
;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */
;
/*!40101 SET NAMES utf8 */
;
-- --------------------------------------------------------
--
-- Table structure for table `ci_sessions`
--
CREATE
TABLE
IF
NOT
EXISTS
`
ci_sessions
`
(
`
session_id
`
varchar
(
40
)
collate
utf8_bin
NOT
NULL
default
'
0
'
,
`
ip_address
`
varchar
(
16
)
collate
utf8_bin
NOT
NULL
default
'
0
'
,
`
user_agent
`
varchar
(
150
)
collate
utf8_bin
NOT
NULL
,
`
last_activity
`
int
(
10
)
unsigned
NOT
NULL
default
'
0
'
,
`
user_data
`
text
collate
utf8_bin
NOT
NULL
,
PRIMARY
KEY
(
`
session_id
`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COLLATE
=
utf8_bin
;
-- --------------------------------------------------------
--
-- Table structure for table `login_attempts`
--
CREATE
TABLE
IF
NOT
EXISTS
`
login_attempts
`
(
`
id
`
int
(
11
)
NOT
NULL
auto_increment
,
`
ip_address
`
varchar
(
40
)
collate
utf8_bin
NOT
NULL
,
`
time
`
timestamp
NOT
NULL
default
CURRENT_TIMESTAMP
on
update
CURRENT_TIMESTAMP
,
PRIMARY
KEY
(
`
id
`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COLLATE
=
utf8_bin
AUTO_INCREMENT
=
1
;
-- --------------------------------------------------------
--
-- Table structure for table `roles`
--
CREATE
TABLE
IF
NOT
EXISTS
`
roles
`
(
`
id
`
int
(
11
)
NOT
NULL
auto_increment
,
`
parent_id
`
int
(
11
)
NOT
NULL
default
'
0
'
,
`
name
`
varchar
(
30
)
collate
utf8_bin
NOT
NULL
,
PRIMARY
KEY
(
`
id
`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COLLATE
=
utf8_bin
AUTO_INCREMENT
=
3
;
--
-- Dumping data for table `roles`
--
INSERT
INTO
`
roles
`
(
`
id
`
,
`
parent_id
`
,
`
name
`
)
VALUES
(
1
,
0
,
'
User
'
)
,
(
2
,
0
,
'
Admin
'
)
;
-- --------------------------------------------------------
--
-- Table structure for table `permissions`
--
CREATE
TABLE
IF
NOT
EXISTS
`
permissions
`
(
`
id
`
int
(
11
)
NOT
NULL
auto_increment
,
`
role_id
`
int
(
11
)
NOT
NULL
,
`
data
`
text
collate
utf8_bin
,
PRIMARY
KEY
(
`
id
`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COLLATE
=
utf8_bin
AUTO_INCREMENT
=
1
;
-- --------------------------------------------------------
--
-- Table structure for table `users`
--
CREATE
TABLE
IF
NOT
EXISTS
`
users
`
(
`
id
`
int
(
11
)
NOT
NULL
auto_increment
,
`
role_id
`
int
(
11
)
NOT
NULL
default
'
1
'
,
`
username
`
varchar
(
25
)
collate
utf8_bin
NOT
NULL
,
`
password
`
varchar
(
34
)
collate
utf8_bin
NOT
NULL
,
`
email
`
varchar
(
100
)
collate
utf8_bin
NOT
NULL
,
`
banned
`
tinyint
(
1
)
NOT
NULL
default
'
0
'
,
`
ban_reason
`
varchar
(
255
)
collate
utf8_bin
default
NULL
,
`
newpass
`
varchar
(
34
)
collate
utf8_bin
default
NULL
,
`
newpass_key
`
varchar
(
32
)
collate
utf8_bin
default
NULL
,
`
newpass_time
`
datetime
default
NULL
,
`
last_ip
`
varchar
(
40
)
collate
utf8_bin
NOT
NULL
,
`
last_login
`
datetime
NOT
NULL
default
'
0000-00-00 00:00:00
'
,
`
created
`
datetime
NOT
NULL
default
'
0000-00-00 00:00:00
'
,
`
modified
`
timestamp
NOT
NULL
default
CURRENT_TIMESTAMP
on
update
CURRENT_TIMESTAMP
,
PRIMARY
KEY
(
`
id
`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COLLATE
=
utf8_bin
AUTO_INCREMENT
=
3
;
--
-- Dumping data for table `users`
--
INSERT
INTO
`
users
`
(
`
id
`
,
`
role_id
`
,
`
username
`
,
`
password
`
,
`
email
`
,
`
banned
`
,
`
ban_reason
`
,
`
newpass
`
,
`
newpass_key
`
,
`
newpass_time
`
,
`
last_ip
`
,
`
last_login
`
,
`
created
`
,
`
modified
`
)
VALUES
(
1
,
2
,
'
admin
'
,
'
$1$i75.Do4.$ROPRZjZzDx/JjqeVtaJLW.
'
,
'
[email protected]
'
,
0
,
NULL
,
NULL
,
NULL
,
NULL
,
'
127.0.0.1
'
,
'
2008-11-30 04:56:38
'
,
'
2008-11-30 04:56:32
'
,
'
2008-11-30 04:56:38
'
)
,
(
2
,
1
,
'
user
'
,
'
$1$bO..IR4.$CxjJBjKJ5QW2/BaYKDS7f.
'
,
'
[email protected]
'
,
0
,
NULL
,
NULL
,
NULL
,
NULL
,
'
127.0.0.1
'
,
'
2008-12-01 14:04:14
'
,
'
2008-12-01 14:01:53
'
,
'
2008-12-01 14:04:14
'
)
;
-- --------------------------------------------------------
--
-- Table structure for table `user_autologin`
--
CREATE
TABLE
IF
NOT
EXISTS
`
user_autologin
`
(
`
key_id
`
char
(
32
)
collate
utf8_bin
NOT
NULL
,
`
user_id
`
mediumint
(
8
)
NOT
NULL
default
'
0
'
,
`
user_agent
`
varchar
(
150
)
collate
utf8_bin
NOT
NULL
,
`
last_ip
`
varchar
(
40
)
collate
utf8_bin
NOT
NULL
,
`
last_login
`
timestamp
NOT
NULL
default
CURRENT_TIMESTAMP
on
update
CURRENT_TIMESTAMP
,
PRIMARY
KEY
(
`
key_id
`
,
`
user_id
`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COLLATE
=
utf8_bin
;
-- --------------------------------------------------------
--
-- Table structure for table `user_profile`
--
CREATE
TABLE
IF
NOT
EXISTS
`
user_profile
`
(
`
id
`
int
(
11
)
NOT
NULL
auto_increment
,
`
user_id
`
int
(
11
)
NOT
NULL
,
`
country
`
varchar
(
20
)
collate
utf8_bin
default
NULL
,
`
website
`
varchar
(
255
)
collate
utf8_bin
default
NULL
,
PRIMARY
KEY
(
`
id
`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COLLATE
=
utf8_bin
AUTO_INCREMENT
=
2
;
--
-- Dumping data for table `user_profile`
--
INSERT
INTO
`
user_profile
`
(
`
id
`
,
`
user_id
`
,
`
country
`
,
`
website
`
)
VALUES
(
1
,
1
,
NULL
,
NULL
)
;
-- --------------------------------------------------------
--
-- Table structure for table `user_temp`
--
CREATE
TABLE
IF
NOT
EXISTS
`
user_temp
`
(
`
id
`
int
(
11
)
NOT
NULL
auto_increment
,
`
username
`
varchar
(
255
)
collate
utf8_bin
NOT
NULL
,
`
password
`
varchar
(
34
)
collate
utf8_bin
NOT
NULL
,
`
email
`
varchar
(
100
)
collate
utf8_bin
NOT
NULL
,
`
activation_key
`
varchar
(
50
)
collate
utf8_bin
NOT
NULL
,
`
last_ip
`
varchar
(
40
)
collate
utf8_bin
NOT
NULL
,
`
created
`
timestamp
NOT
NULL
default
CURRENT_TIMESTAMP
on
update
CURRENT_TIMESTAMP
,
PRIMARY
KEY
(
`
id
`
)
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8
COLLATE
=
utf8_bin
AUTO_INCREMENT
=
1
;
CodeIgniter DX Auth 插件用户手册 - 开始
开始了
在你跟随示例安装并设置好 DX Auth 配置文件之后,你或许只想看看 DX Auth 捆绑的示例运行情况,而不是先阅读这个简单的示例。
要玩玩这个你可以打开:
- {你的 CI URL}/auth/login/ 登录。
- {你的 CI URL}/auth/logout/ 退出。
- {你的 CI URL}/auth/register/ 注册。
- {你的 CI URL}/auth/register_recaptcha/ 使用 reCAPTCHA 注册。
- {你的 CI URL}/auth/forgot_password/ 使用忘记密码功能。
- {你的 CI URL}/auth/change_password/ 在你登录后修改密码。
- {你的 CI URL}/auth/cancel_account/ 在你登录后把帐号自杀。
要访问管理员控制面板(你需要以管理员身份登录或者你的用户角色已经授权给了权限表):
- {你的 CI URL}/backend/users/ 管理用户。
- {你的 CI URL}/backend/unactivated_users/ 管理未激活用户
- {你的 CI URL}/backend/roles/ 管理角色。
- {你的 CI URL}/backend/uri_permissions/ 管理URI权限。
- {你的 CI URL}/backend/custom_permissions/ 管理自定义权限。
通常,{你的 CI URL} 就是在你 CI 配置文件中 'base_url' 和 'index_page' 项的组合。
CodeIgniter DX Auth 插件用户手册 - 函数参考
原文:http://dexcell.shinsengumiteam.com/dx_auth/general/functions.html
主要函数
下面是你可以在 DX Auth 库中可以使用的函数列表。
login($login, $password, $remember = TRUE)
登录 用户。如果登录成功,返回 TRUE ,否则 FALSE。
$login 是用户名或E-mail地址或者两者均可,取决于 dx_auth 配置文件中的设置。
$password 是用户密码。
$remember 是使用户下次打开网站时仍记住用户(“记住登录”)。
如果函数返回 FALSE 你可以使用 get_auth_error() 函数返回一错误字符串。
logout()
注销 用户。
register($username, $password,$email)
注册 新用户。如果注册成功,返回新用户记录,否则返回 FALSE。
如果 dx_auth 配置文件中 DX_email_activation 的值为 TRUE ,那么它将发送E-mail验证,并要求用户验证帐号。
如果 dx_auth 配置文件中 DX_email_activation 值为 FALSE 且 DX_email_account_details 值为 TRUE ,那么它将通过E-mail发送用户帐号信息。
此函数将自动设置新用户角色ID ( role_id )为 1,所以你需要确保有 id = 1 的记录在角色表中,它的name字段值是类似“普通用户(normal user)”这样的。
forgot_password($login)
发送 一封带有密钥的邮件以重置他们的密码。如果成功则返回 TRUE, 否则返回 FALSE。
$login 是用户名或E-mail。
由于密码是单向加密的,不可能得到原值。这就是我们需要重置它的 原因。
如果函数返回 FALSE ,你可以使用 get_auth_error() 函数返回一错误字符串。
reset_password($username, $key = '')
基于 用户名和密钥重设密码。通常和 forgot_password() 函数搭配使用。如果成功返回 TRUE 否则返回 FALSE。
activate($username, $key = '')
基于 用户名和密钥激活用户。在 dx_auth 配置文件中 DX_email_verification 设置为 TRUE 的前提下,它常用于在注册后激活用户帐号。
change_password($old_pass, $new_pass)
修改 当前已登录用户的密码。调用此函数前请确保你已经检查用户成功登录了。成功返回 TRUE,失败返回 FALSE。
如果函数返回 FALSE ,你可以使用 get_auth_error() 函数返回一错误字符串。
cancel_account($password)
从数 据库删除当前已登录用户的帐号。调用此函数前请确保你已经检查用户成功登录了。 成功返回 TRUE,失败返回 FALSE。
如果函数返回 FALSE ,你可以使用 get_auth_error() 函数返回一错误字符串。
get_user_id()
返回 用户 ID,只在用户已登录后可用。
get_username()
返回 用户名,只在用户已登录后可用。
get_role_id()
返回 用户角色 ID,只在用户已登录后可用。
get_role_name()
返回 用户角色名,只在用户已登录后可用。
is_admin()
检查 用户是否为管理员,只在用户已登录后可用。
当用户的角色 ID 和 角色(roles)表中 name 字段值为'admin'(不分大小写)的那行记录的 role_id 字段的值相同,函数将返回 TRUE。
is_role($roles = array(), $use_role_name = TRUE, $check_parent = TRUE)
检查 用户是否有 $roles 权限。
如果 $use_role_name = TRUE 则 $roles 是类似于 '管理员','编辑','等' 的权限名,否则 $roles 是类似于 0, 1, 2 的 role_id 。
如果 $check_parent 为 TRUE 意味着如果此角色在用户角色中没有找到,它将检查父角色中是否有那个用户角色。
你可以在 $roles 参数中传递一个数组或者一个字符串。
示例:
if ($this->dx_auth->is_role('admin'))
{
// Do something
}
if ($this->dx_auth->is_role(array('admin', 'moderator'))
{
// Do something
}
// Using an Role ID as $roles parameter
if ($this->dx_auth->is_role('1', FALSE))
{
// Do something
}
if ($this->dx_auth->is_role(array('1', '2'), FALSE))
{
// Do something
}
is_logged_in()
检查 用户是否已登录。
is_banned()
检查用户是否为一个被踢用户。
你应该在调用 login() 函数后才调用这个函数。这样如果 login() 函数返回 FALSE,你可以检查用户是被踢了还是未使用这个函数。
get_ban_reason()
取得 被踢用户的被踢原因。
你应该在调用 login() 函数后才调用这个函数。这样如果 login() 函数返回 FALSE,且用户已被踢,你可以使用这个函数取得原因。
is_username_available($username)
通过 在数据库中查询确认没有相同的用户名,检查用户名是否可用。此函数常用于表单验证的回调函数中。
is_email_available($email)
通过 在数据库中查询确认没有相同的E-mail,检查E-mail是否可用。此函数常用于E-mail表单验证的回调函数中。
get_auth_error()
当 login(), forgot_password(), change_password(), cancel_account() 函数返回失败时,取得一个错误信息。
is_max_login_attempts_exceeded()
检查 登录尝试次数是否超过了在 dx_auth 配置文件中指定的值。
登录次数的增长通过登录 IP 识别。
check_uri_permissions($allow = TRUE)
这个 将检查当前登录的用户是否允许访问当前 URI,基于他所属的角色,或者他的父角色。
下面是当你调用这个函数时将会发生的细节:
首先,函数将检查用户是否已登录,如果用户还没登录,它将重定向到登录 URI。
但如果用户已登录,它将检查用户是否为管理员(admin)。
如果用户是管理员,它将允许访问这个URI。
但如果用户不是管理员,它将检查用户所属角色或父角色是在数据库权限表中否有访问当前URI的权限。
如果用户被禁止,它既爱那个重定向到禁止访问的URI。
你可以在控制器构造器中调用 check_uri_permissions() 以保护整个控制器:
class Home extends Controller
{
function Home()
{
parent::Controller();
$this->dx_auth->check_uri_permissions();
}
}
或者在一个函数中使用它:
function hello_world()
{
$this->dx_auth->check_uri_permissions();
// Do something
}
实例:
有一个用户 role_id = 1 (普通用户 normal user).
在权限表中,有一个指定 了 role_id = 1 的记录,它有 '/test/' URI 的 URI 访问权限。
现在这个用户想要访问 '/test/hi/'。
如果你在 Test 控制器中有这样的代码:
class Test extends Controller
{
function Test()
{
parent::Controller();
// Secure controller
$this->dx_auth->check_uri_permissions();
}
function hi()
{
echo 'Hi';
}
function hello()
{
echo 'Hello';
}
}
这个用户将会通过检查并访问'/test/hi/' URI,会显示 'Hi' 。
因为如果权限 URI 设置为 '/test/',意味着对Test类和它下面所有方法函数授权。
如果你想只对函数限制访问,你可以在设置权限 URI 时指定 '/class/function/'。
例如,在上面的实例中,如果你把 role_id = 1 的URI权限设置为'/test/hi/',用户将可以访问'/test/hi/' URI,但不能访问'/test/hello/' URI。
你也可以设置 URI 权限为 '/' ,以打开对所有 URI 的访问权限。
也可以通过在调用 check_uri_permissions() 时指定 $allow = FALSE (译注:此处原文为 TRUE,应该是有误)以反转前面所有的解释。
这样它将会在 URI 权限找到时禁止用户访问URI ,而不是在 URI 权限找到时允许用户访问 URI。
要设置 URI 权限,你必须使用在权限模型中给出的函数,或者使用你自己的。请查看关于设置权限的示例。
CL Auth 用户请注意,URI 权限现在的格式重命名为 '/class/function/' ,取代了 '/class/function'。
继承
如果用户角色有一个父角色,那用户也有到父角色的权限,等等。要阐述这个,让我们先来看一下这个 URI 权限图解:
User
{
'/home/'
'/help/'
}
Moderator: User
{
'/moderator/'
}
Super_Moderator: Moderator
{
'/super/'
}
Big_Moderator: Moderator
{
'/big/'
}
这意味着,Super_Moderator 角色可以访问 Moderator 和User 的 URI,但不能访问 Big_Moderator 的 URI。
要使用这个特性,你需要在角色表中为每个角色中的 parent_id 指定一个父角色。
这是前面的示例用到的角色表结构。
id parent_id name
-------------------------
1 0 User
2 0 Admin
3 1 Moderator
4 3 Super Moderator
5 3 Big Moderator
注意,这个功能是可 选的,或许你完全可以使用 is_admin(), is_role(), is_logged_in() 这些函数搞定用户验证,而不必使用它。
CodeIgniter DX Auth 插件用户手册 - 事件
事件
事件是 DX Auth 库中的特定函数被调用时触发的函数。要使用这些事件你需要打开 'libraries/DX_Auth_Event.php',放上你的代码。
下面就是你可以在 DX Auth 库中可以用到的事件。
user_activated($user_id)
如果配置中的 'DX_email_activation' 值为 TRUE,此事件就会在用户通过他们E-mail中收到的密钥成功激活后发生。
如果配置中的 'DX_email_activation' 值 为 FALSE,此事件就会在用户成功注册后发生。
$user_id 是被激活用户的ID。
默认情况下,这儿会有创建用户档案的代码。如果你不需要用户档 案,你可以删除这些代码。
user_logged_in($user_id)
此事件在用户登录后发生。$user_id 是登录用户的ID。
user_logging_out($user_id)
此事件在用户退出前发生。$user_id 是退出用户的ID。
user_changed_password($user_id, $new_password)
此事件在用户修改密码后发生。$user_id 是修改密码用户的ID,$new_password 是新的密码。
user_canceling_account($user_id)
此事件在用户帐号被自杀前发生。$user_id 是要被自杀的帐号ID。
默认情况下,这儿会有删除用户档案的代码。如果你不需要用户档 案,你可以删掉这些代码。
checked_uri_permissions($user_id, &$allowed)
此事件在 DX_Auth 中的 check_uri_permissions() 函数被调用时发生。在检查过用户角色是否被授权访问 URI 后,此事件将被触发。
$allowed 是在执行检查之前的结果,由于它是以引用传递的,它的值是可以修改的。
got_permission_value($user_id, $key)
此事件在 DX_Auth 中的 get_permission_value() 被调用时发生。
got_permissions_value($user_id, $key)
此事件在 DX_Auth 中的 get_permissions_value() 被调用时发生。
sending_account_email($data, &$content)
此事件在 dx auth 发送带有帐号信息的邮件之前发生。
$data 是一个数组,包含 username, password, email, 和 last_ip。
$content 是E-mail内容,以引用传递。
默认情况下那儿有关于怎样创建内容的示例代码。你可以修改它以适 合你的需求。
sending_activation_email($data, &$content)
此事件在 dx auth 发送激活邮件之前发生。
$data 是一个数组,包含 username, password, email, last_ip, activation_key, activate_url。
$content 是E-mail内容,以引用传递。
默认情况下那儿有关于怎样创建内容的示例代码。你可以修改它以适 合你的需求。
sending_forgot_password_email($data, &$content)
此事件在 dx auth 发送重设密码邮件之前发生。
$data 是一个数组,包含 password, key, 和 reset_password_uri。
$content 是E-mail内容,以引用传递。
默认情况下那儿有关于怎样创建内容的示例代码。你可以修改它以适 合你的需求。
get_permission_value($key, $check_parent = TRUE)
通过 指定的键获取权限值。只在用户已登录后才可调用此函数。
$key 是权限数组键(注意:权限在表中是以数组存储的)。
如果 $check_parent 为 TRUE 意味着如果权限值在用户角色中没有找到,它将尝试获取父角色的权限值
如果权限找到返回其值,否则返回 NULL 。
要设置权限,你必须使用在权限模型中指定的函数,或者自己编写。 请查看关于设置权限的示例。
注意:使用此函数是可选的, 或许你完全可以手动检查用户权限,并使用 is_admin(), is_role() 这样的函数手动搞定权限,而不必使用它。
get_permissions_value($key, $array_key = 'default')
通过 指定的键获取那些权限的值。只在用户已登录后才可调用此函数。
此函数将在用户权限和父权限中搜索键。
$key 是权限数组键 (注意:权限在表中是以数组存储的)。
$array_key = 'default'. 返回以 0,1,2 作为键值排列的数组。
$array_key = 'role_id'. 返回以 role_id 作为键值排列的数组。
$array_key = 'role_name'. 返回以 role_name 作为键值排列的数组。
如果权限找到,返回包含其值的数组,否则返回 NULL。
要设置权限,你必须使用在权限模型中指定的函数,或者自己编写。 请查看关于设置权限的示例。
注意:使用此函数是可选的, 或许你完全可以手动检查用户权限,并使用 is_admin(), is_role() 这样的函数手动搞定权限,而不必使用它。
deny_access($uri = 'deny')
调用 此函数将把用户重定向到 $uri 变量设定的值。默认 $uri 为 'deny'。
$uri = 'deny' 将重定向用户到 dx_auth 配置文件中指定的 'DX_deny_uri' 值。
$uri = 'login' 将重定向用户到 dx_auth 配置文件中指定的 'DX_login_uri' 值。
$uri = 'banned' 将重定向用户到 dx_auth 配置文件中指定的 'DX_banned_uri' 值。
catpcha()
创建 一个用于表单验证的图片验证码。
get_catpcha_image()
获取 创建的HTML图像。请在视图中使用这个函数。
is_captcha_expired()
检查 创建的验证码是否已过期。请在表单验证回调函数中使用这个函数。
is_captcha_match($code)
检查 创建的验证码文本是否与 $code 匹配。请在表单验证回调函数中使用这个函数。
reCAPTCHA 函数
(译注:一系列用于英文验证码的函数,可以有声音验证,中文网站怕是很少用到, 先不翻译了。感兴趣的朋友请查看原文)
CodeIgniter DX Auth 插件用户手册 - 配置
原文: http://dexcell.shinsengumiteam.com/dx_auth/general/config.html
配置
下面是 DX Auth 库中的配置,你可以看一下代码中的注释。
/*
| -------------------------------------------------------------------
| DX Auth Config
| -------------------------------------------------------------------
*/
/*
|--------------------------------------------------------------------------
| 网站细节
|--------------------------------------------------------------------------
|
| 这些细节用于 DX Auth 库发送的E-mail里。
|
*/
$config
[
'
DX_website_name
'
]
=
'
你的网站名
'
;
$config
[
'
DX_webmaster_email
'
]
=
'
[email protected]
'
;
/*
|--------------------------------------------------------------------------
| 数据库表
|--------------------------------------------------------------------------
|
| 设定 DX Auth 使用的表
|
| 'DX_table_prefix' 允许你指定其余表用到的表前缀
|
| 例如 'DX_table_prefix' 设定为 'DX_','DX_users_table' 设置为 'user',
| 将会使 DX Auth 使用 'DX_users' 作为用户表.
|
*/
$config
[
'
DX_table_prefix
'
]
=
''
;
$config
[
'
DX_users_table
'
]
=
'
users
'
;
$config
[
'
DX_user_profile_table
'
]
=
'
user_profile
'
;
$config
[
'
DX_user_temp_table
'
]
=
'
user_temp
'
;
$config
[
'
DX_user_autologin
'
]
=
'
user_autologin
'
;
$config
[
'
DX_roles_table
'
]
=
'
roles
'
;
$config
[
'
DX_permissions_table
'
]
=
'
permissions
'
;
$config
[
'
DX_login_attempts_table
'
]
=
'
login_attempts
'
;
/*
|--------------------------------------------------------------------------
| 密码混淆 (salt)
|--------------------------------------------------------------------------
|
| You can add major salt to be hashed with password.
| For example, you can get salt from here:
https://www.grc.com/passwords.htm
|
| 注意:
|
| 记住如果你在有用户注册之后修改此值,之前注册的用户将无法再登录
|
*/
$config
[
'
DX_salt
'
]
=
''
;
/*
|--------------------------------------------------------------------------
| 注册相关设置
|--------------------------------------------------------------------------
|
| 'DX_email_activation' = 要求用户注册后激活他们的帐号
| 'DX_email_activation_expire' = 激活限制时间,超过此时间扔未激活的用户将被从数据库中删除。默认是48小时 (60*60*24*2)。
| 'DX_email_account_details' = 注册后发送帐号详情的邮件。只在 'DX_email_activation' 为 FALSE 时有效。
|
*/
$config
[
'
DX_email_activation
'
]
=
TRUE
;
$config
[
'
DX_email_activation_expire
'
]
=
60
*
60
*
24
*
2
;
$config
[
'
DX_email_account_details
'
]
=
TRUE
;
/*
|--------------------------------------------------------------------------
| 登录设置
|--------------------------------------------------------------------------
|
| 'DX_login_using_username' = 设定用户是否可以在用户名表单域使用用户名登录。
| 'DX_login_using_email' = 设定用户是否可以在用户名表单域使用E-mail登录。
|
| 以上两项你必须至少设置一项为True。
|
| 'DX_login_record_ip' = 设定当用户登录时是否将其IP保存到数据库。
| 'DX_login_record_time' = 设定当用户登录时是否记录其登录时间。
|
*/
$config
[
'
DX_login_using_username
'
]
=
TRUE
;
$config
[
'
DX_login_using_email
'
]
=
TRUE
;
$config
[
'
DX_login_record_ip
'
]
=
TRUE
;
$config
[
'
DX_login_record_time
'
]
=
TRUE
;
/*
|--------------------------------------------------------------------------
| 自动登录设置
|--------------------------------------------------------------------------
|
| 'DX_autologin_cookie_name' = 设置自动登录所使用的Cookie名字。
| 'DX_autologin_cookie_life' = 设置自动登录所使用的cookie有效时间。默认为2个月(60*60*24*31*2)。
|
*/
$config
[
'
DX_autologin_cookie_name
'
]
=
'
autologin
'
;
$config
[
'
DX_autologin_cookie_life
'
]
=
60
*
60
*
24
*
31
*
2
;
/*
|--------------------------------------------------------------------------
| 登录尝试
|--------------------------------------------------------------------------
|
| 'DX_count_login_attempts' = 设定当用户登录失败是 DX Auth 是否统计登录失败次数。
| 'DX_max_login_attempts' = 设定函数 is_login_attempt_exceeded() 返回 TRUE 之前的最大尝试次数。
|
*/
$config
[
'
DX_count_login_attempts
'
]
=
TRUE
;
$config
[
'
DX_max_login_attempts
'
]
=
1
;
/*
|--------------------------------------------------------------------------
| 忘记密码相关设置
|--------------------------------------------------------------------------
|
| 'DX_forgot_password_expire' = 忘记密码密钥超时时间,默认为 15 分钟(900 seconds)。
|
*/
$config
[
'
DX_forgot_password_expire
'
]
=
900
;
/*
|--------------------------------------------------------------------------
| 验证码
|--------------------------------------------------------------------------
|
| 你可以在此设定由 DX Auth 库生成的验证码。
| 'DX_captcha_directory' = 创建验证码的目录名称。
| 'DX_captcha_fonts_path' = 此目录中的字体将被用于验证码的创建。
| 'DX_captcha_font_size' = 文本写入验证码图片时的字体大小。使用随机大小请留空。
| 'DX_captcha_grid' = 在验证码图片中显示网格
| 'DX_captcha_expire' = 验证码超时时间,默认为3分钟(180 seconds)。
| 'DX_captcha_case_sensitive' = 设定验证码是否区分大小写。
|
*/
$config
[
'
DX_captcha_directory
'
]
=
'
captcha
'
;
$config
[
'
DX_captcha_fonts_path
'
]
=
$config
[
'
DX_captcha_path
'
]
.
'
fonts
'
;
$config
[
'
DX_captcha_width
'
]
=
320
;
$config
[
'
DX_captcha_height
'
]
=
95
;
$config
[
'
DX_captcha_font_size
'
]
=
''
;
$config
[
'
DX_captcha_grid
'
]
=
TRUE
;
$config
[
'
DX_captcha_expire
'
]
=
180
;
$config
[
'
DX_captcha_case_sensitive
'
]
=
TRUE
;
/*
|--------------------------------------------------------------------------
| reCAPTCHA //此段略
|--------------------------------------------------------------------------
|
| If you are planning to use reCAPTCHA function, you have to set reCAPTCHA key here
| You can get the key by registering at
http://recaptcha.net
|
*/
$config
[
'
DX_recaptcha_public_key
'
]
=
''
;
$config
[
'
DX_recaptcha_private_key
'
]
=
''
;
/*
|--------------------------------------------------------------------------
| URI
|--------------------------------------------------------------------------
|
| 设定在 DX Auth 库中用于重定向的 URI
| 'DX_deny_uri' = 禁止访问 URI.
| 'DX_login_uri' = 登录表单 URI.
| 'DX_activate_uri' = 激活用户 URI.
| 'DX_reset_password_uri' = 重置密码 URI.
|
| 去掉'DX_'前缀,这些值可以由 DX Auth 库读取。
| 例如你可以在控制器中通过使用 $this->dx_auth->deny_uri 访问 'DX_deny_uri'。
|
*/
$config
[
'
DX_deny_uri
'
]
=
'
/auth/deny/
'
;
$config
[
'
DX_login_uri
'
]
=
'
/auth/login/
'
;
$config
[
'
DX_banned_uri
'
]
=
'
/auth/banned/
'
;
$config
[
'
DX_activate_uri
'
]
=
'
/auth/activate/
'
;
$config
[
'
DX_reset_password_uri
'
]
=
'
/auth/reset_password/
'
;
/*
|--------------------------------------------------------------------------
| 辅助函数配置
|--------------------------------------------------------------------------
|
| 下面的配置实际上在 DX_Auth 库中并没有用到。
| 它们只是帮助你在控制器里更容易地编写代码。
| 如果你不需要它你可以留空,或干脆删掉它。
|
| 然而它们可以通过去掉'DX_'前缀在 DX Auth 库中访问。
| 例如你可以在控制器中通过使用 $this->dx_auth->register_uri 访问 'DX_register_uri'。
|
*/
// 注册
$config
[
'
DX_allow_registration
'
]
=
TRUE
;
$config
[
'
DX_captcha_registration
'
]
=
TRUE
;
// 登录
$config
[
'
DX_captcha_login
'
]
=
FALSE
;
// URI 路径
$config
[
'
DX_logout_uri
'
]
=
'
/auth/logout/
'
;
$config
[
'
DX_register_uri
'
]
=
'
/auth/register/
'
;
$config
[
'
DX_forgot_password_uri
'
]
=
'
/auth/forgot_password/
'
;
$config
[
'
DX_change_password_uri
'
]
=
'
/auth/change_password/
'
;
$config
[
'
DX_cancel_account_uri
'
]
=
'
/auth/cancel_account/
'
;
// 表单视图
$config
[
'
DX_login_view
'
]
=
'
auth/login_form
'
;
$config
[
'
DX_register_view
'
]
=
'
auth/register_form
'
;
$config
[
'
DX_forgot_password_view
'
]
=
'
auth/forgot_password_form
'
;
$config
[
'
DX_change_password_view
'
]
=
'
auth/change_password_form
'
;
$config
[
'
DX_cancel_account_view
'
]
=
'
auth/cancel_account_form
'
;
// 页面视图
$config
[
'
DX_deny_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_banned_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_logged_in_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_logout_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_register_success_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_activate_success_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_forgot_password_success_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_reset_password_success_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_change_password_success_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_register_disabled_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_activate_failed_view
'
]
=
'
auth/general_message
'
;
$config
[
'
DX_reset_password_failed_view
'
]
=
'
auth/general_message
'
;
CodeIgniter DX Auth 插件用户手册 - 模型
原文:http://dexcell.shinsengumiteam.com/dx_auth/general/models.html
模型
DX Auth 库只带有少量模型文件分发,它们位于 'models/dx_auth/' 文件夹中。
这些模型包含与特定表协同工作的函数。你可以在这些模型中使用这些函数,例如创建一个你自己的管理员面板。这些模型中的函数名也是自解释的,因此用 起来是很容易的。
下面是在 'models/dx_auth/' 文件夹中包含的模型。
- users.php 包含与 'DX_users_table' 表协同工作的函数。
- user_profile.php 包含与 'DX_user_profile_table' 表协同工作的函数。
- user_temp.php 包含与 'DX_user_temp_table' 表协同工作的函数。
- user_autologin.php 包含与 'DX_user_autologin' 表协同工作的函数。
- roles.php 包含与 'DX_roles_table' 表协同工作的函数。
- permissions.php 包含与 'DX_permissions_table' 表协同工作的函数。
- login_attempts.php 包含与 'DX_login_attempts_table' 表协同工作的函数。
CodeIgniter DX Auth 插件用户手册 - 数据表解析
原文:http://dexcell.shinsengumiteam.com/dx_auth/general/tables.html
数据表解析
这里是 DX Auth 库 安装的数据表,以及对每个表字段的解释。
users 表
这是主表,用户信息存在这儿。
- id = 主键。
- role_id = 角色表的外键,默认为 1。
- username = 用户名。
- password = 用户密码(已加密)。
- email = 用户E-mail。
- banned = 设定用户是否已被踢(1 = 被踢 0 = 未被踢)。默认为 0。
- ban_reason = 被踢原因。
- newpass = 用户请求重设密码后产生的新密码。
- newpass_key = 修改密码的密钥。如果此密钥通过了 reset_password() 函数的验证,它将以 'newpass' 的值替代 'password' 的值。
- newpass_time = 发出重设密码请求时间
- last_ip = 用户注册时的 IP 地址。以后如果 'DX_login_record_ip' 设置为 TRUE,每当用户登录时其 IP 将记录在此处。
- last_login = if 'DX_login_record_time' is TRUE, login time will be recorded here.
- created = Time when this record is created, normally you can use this to determine when user is registered.
- modified = Time when this record is modified.
Username field shoudn't contain space and other vulnerable character. Therefore when you validate username in registration, it's highly recommended you use alpha_dash in your form validation.
user_temp 表
此表用于存放未激活用户信息。
id = Primary key.
username = Username.
password = User password (encrypted).
email = User email.
activation_key = Key needed to activate user. User who activated will be moved to users table.
last_ip = IP address of user when register.
created = Date time when this record is created.
If 'DX_email_activation' is TRUE, people who have registered is inserted into this table instead of users table. If they activate their account, the record will be moved into users table.
user_profile 表
此表用于存放用户档案信息。
id = Primary key.
user_id = Foreign key to users table.
Other field is up to you. You can add or delete to fit your needs.
user_autologin 表
此表用于当用户登录时保存自动登录变量,使 用自动登录 cookie 验证它。
- key_id = 主键,key_id 是在用户使用“记住我”登录时生成的唯一字符串。
- user_id = 主键,使用“记住我”登录的用户 ID。
- user_agent = User agent of browser when user login using remember TRUE.
- last_ip = User IP address when user login using remember TRUE.
- last_login = Time when user login using remember TRUE.
通常,你不需要改动这个表。
roles 表
此表用于记录角色名称,例如 registered user, admin, moderator, 等.
- id = Primary key.
- parent_id = Self reference to id. Which mean this role will inherit parent_id role. Default is 0 (No parent).
- name = 角色名.
你需要在此表中有至少 2 条记录。
第一,id = 1 的记录必须以类似 'registered user' 或者类似名字命名。因为用户表有新记录创建时将自动设置 role_id = 1。
另一条记录的 name 字段值必须为 'admin' (不分大小写)。但它的ID并不重要。
如果你不准备使用权限特性,你不需要关心 parent_id ,设为 0 即可。否则,你应该在函数指南中查看 check_uri_permissions() 函数以了解有 parent_id 的作用。
permissions 表
- id = Primary key.
- role_id = Foreign key to roles table.
- data(text) = 权限数据。权限数据以转换为字符串的数组保存。
check_uri_permission(), get_permission_value(), get_permissions_value() 依赖于此表。要设置此数据,你必须使用权限模型中的函数,或者编写你自己的。请参考关于如何设置权限的例子。
login_attempts table
此表记录用户的登录尝试。
- id = Primary key.
- ip_address = IP address of someone who try to login.
- time = Time when someone who try to login.
DX Auth will only use this table when 'DX_count_login_attempts' is set to TRUE in config file. And if login attempts for same IP is more than 'DX_max_login_attempts' in config file, it will not count that IP anymore.
role_uri table
Obsolete in 1.0.2 above. Use permissions table.
CodeIgniter DX Auth 插件用户手册 - 问题处理
问题处理
如果你没有弄好 E-mail 设置,DX Auth 库发送邮件可能会失败。
如果发生了这个,你需要在 application/config/ 文件夹中创建 email.php ,并粘贴上下面的代码。可以修改它以符合你的需求。
<?php
if
(
!
defined
(
'
BASEPATH
'
))
exit
(
'
No direct script access allowed
'
)
;
$config
[
'
protocol
'
]
=
'
smtp
'
;
$config
[
'
smtp_host
'
]
=
'
mail.localhost.com
'
;
$config
[
'
smtp_user
'
]
=
'
username
'
;
$config
[
'
smtp_pass
'
]
=
'
password
'
;
$config
[
'
smtp_port
'
]
=
'
25
'
;
关于这个的更多信息,你可以参考 Codeigniter 的E-mail辅助函数。