CodeIgniter DX Auth 中文手册翻译

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

  1. 将压缩包解压。
  2. 复制 captcha 文件夹到你的 CI 文件夹。让 Web 服务器对此文件夹可写。
  3. 复制 application 文件夹到你的 CI application 文件夹。
  4. 将 DX Auth 的数据库结构安装到你的数据库。
  5. 打开 application/config/config.php。修改 $config['sess_use_database'] 为 TRUE。

只安装 DX Auth 库

  1. 将压缩包解压。
  2. 复制 captcha 文件夹到你的 CI 文件夹。让 Web 服务器对此文件夹可写。
  3. 复制 application/plugins/ 文件夹到你的 CI application/plugins/ 文件夹。
  4. 复制 application/config/ 文件夹到你的 CI application/config/ 文件夹。
  5. 复制 application/libraries/ 文件夹到你的 CI application/libraries/ 文件夹。
  6. 复制 application/helpers/ 文件夹到你的 CI application/helpers/ 文件夹。
  7. 复制 application/models/ 文件夹到你的 CI application/models/ 文件夹。
  8. 复制 application/language/ 文件夹到你的 CI application/language/ 文件夹。
  9. 将 DX Auth 的数据库结构安装到你的数据库。
  10.  打开 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.', 'admin@localhost.com', 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.', 'user@localhost.com', 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'] = 'webmaster@yourhost.com';
/*
|--------------------------------------------------------------------------
| 数据库表
|--------------------------------------------------------------------------
|
| 设定 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/' 文件夹中包含的模型。

  1. users.php 包含与 'DX_users_table' 表协同工作的函数。
  2. user_profile.php 包含与 'DX_user_profile_table' 表协同工作的函数。
  3. user_temp.php 包含与 'DX_user_temp_table'  表协同工作的函数。
  4. user_autologin.php 包含与 'DX_user_autologin'  表协同工作的函数。
  5. roles.php 包含与 'DX_roles_table' 表协同工作的函数。
  6. permissions.php 包含与 'DX_permissions_table'  表协同工作的函数。
  7. 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辅助函数。

posted @ 2010-11-12 17:53  吊儿郎当  阅读(4747)  评论(4编辑  收藏  举报