zf-commons / zfc-user
为 ZF2 提供的通用用户注册和认证模块。支持 Zend\Db 和 Doctrine2。
Requires
- php: ^5.5|^7.0
- zendframework/zend-authentication: ^2.5
- zendframework/zend-crypt: ^3.0
- zendframework/zend-db: ^2.8
- zendframework/zend-form: ^2.9
- zendframework/zend-http: ^2.5
- zendframework/zend-hydrator: ^2.0
- zendframework/zend-i18n: ^2.7
- zendframework/zend-inputfilter: ^2.7
- zendframework/zend-loader: ^2.5
- zendframework/zend-modulemanager: ^2.7
- zendframework/zend-mvc: ^3.0
- zendframework/zend-mvc-plugin-flashmessenger: ^1.0
- zendframework/zend-mvc-plugin-prg: ^1.0
- zendframework/zend-servicemanager: ^3.0
- zendframework/zend-session: ^2.7
- zendframework/zend-stdlib: ^3.0
- zendframework/zend-validator: ^2.8
- zendframework/zend-view: ^2.8
Requires (Dev)
- phpmd/phpmd: 1.4.*
- phpunit/phpunit: >=3.7,<4
- squizlabs/php_codesniffer: 1.4.*
- zendframework/zend-captcha: ^2.6
Suggests
- zendframework/zend-captcha: Zend\Captcha if you want to use the captcha component
README
由 Evan Coury 和 ZF-Commons 团队创建
简介
ZfcUser 是一个为 Zend Framework 2 设计的用户注册和认证模块。ZfcUser 默认与 Zend\Db 一起工作,但也可以使用其他存储适配器模块(见下文)。ZfcUser 为在 ZF2 网站中添加用户认证和注册提供了基础。它被设计得非常简单且易于扩展。
更多信息和示例可在 ZfcUser Wiki 上找到
版本
请使用下表确定您应使用 ZfcUser 的哪个版本。
存储适配器模块
默认情况下,ZfcUser 随带使用 Zend\Db 存储用户的支持。然而,通过安装可选的替代存储适配器模块,您可以利用其他持久化用户的方法
- ZfcUserDoctrineORM - Doctrine2 ORM
- ZfcUserDoctrineMongoODM - Doctrine2 MongoDB ODM
要求
- Zend Framework 2 (最新 master)
- ZfcBase (最新 master)。
特性 / 目标
- 通过用户名、电子邮件或两者同时验证(可以选择退出用户名的概念并仅使用电子邮件)[完成]
- 用户注册 [完成]
- 表单防止 CSRF [完成]
- 默认支持 Doctrine2 和 Zend\Db [完成]
- 强大的事件系统,允许扩展 [完成]
- 提供 ActionController 插件和视图辅助器 [完成]
安装
主要设置
通过克隆项目
- 通过克隆到
./vendor/
中安装 ZfcBase ZF2 模块。 - 将此项目克隆到您的
./vendor/
目录。
使用 composer
-
在您的 composer.json 中添加此项目和 ZfcBase。
"require": { "zf-commons/zfc-user": "^3.0" }
-
现在运行以下命令让 composer 下载 ZfcUser
$ php composer.phar update
安装后
-
在您的
application.config.php
文件中启用它。<?php return array( 'modules' => array( // ... 'ZfcUser', ), // ... );
-
然后导入位于
./vendor/zf-commons/zfc-user/data/schema.sql
(如果您使用 composer 安装)或./vendor/ZfcUser/data/schema.sql
的 SQL 架构。
安装后:Doctrine2 ORM
即将推出...
安装后:Doctrine2 MongoDB ODM
即将推出...
安装后:Zend\Db
- 如果您在服务管理器配置中还没有有效的 Zend\Db\Adapter\Adapter,请在
./config/autoload/database.local.php
中放入以下内容
<?php return array( 'db' => array( 'driver' => 'PdoMysql', 'hostname' => 'changeme', 'database' => 'changeme', 'username' => 'changeme', 'password' => 'changeme', ), 'service_manager' => array( 'factories' => array( 'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory', ), ), );
导航到 http://yourproject/user,您应该会看到登录页面。
密码安全性
不要更改密码哈希设置的默认值,除非 A) 您已进行了充分的研究并完全理解您正在更改的内容,并且 B) 您有 非常 特定的原因要偏离默认设置。
如果您计划更改默认的密码哈希设置,请阅读以下内容
密码散列设置可以在任何时间更改,而不会使现有用户帐户失效。现有用户密码将在下次成功登录时自动重新散列。
警告:更改默认密码散列设置可能导致严重问题,例如使散列密码更容易受到暴力攻击,或者使散列过程如此昂贵,以至于登录和注册对用户来说速度过慢,给服务器带来巨大负担。提供的默认设置在这两者之间提供了一个非常合理的平衡,适用于2013年的计算能力。
选项
ZfcUser模块提供了一些选项,允许您快速自定义基本功能。安装ZfcUser后,将./vendor/zf-commons/zfc-user/config/zfcuser.global.php.dist
复制到./config/autoload/zfcuser.global.php
,并根据需要更改值。
以下选项可用
- user_entity_class - 要使用的实体类名称。如果您想使用自己的实体类而不是默认类,则很有用。默认是
ZfcUser\Entity\User
。 - enable_username - 布尔值,启用注册表单上的用户名字段。默认值是
false
。 - auth_identity_fields - 数组值,指定用户在登录时可以使用的“身份”字段。可接受值:用户名、电子邮件。
- enable_display_name - 布尔值,启用注册表单上的显示名称字段。默认值是
false
。 - enable_registration - 布尔值,确定是否允许用户注册。默认值是
true
。 - login_after_registration - 布尔值,用户成功注册后自动登录。默认值是
false
。 - use_registration_form_captcha - 布尔值,确定是否在用户注册表单上使用验证码。默认值是
true
。(注意,目前这仅使用一个较弱的Zend\Text\Figlet验证码,但我有计划使所有Zend\Captcha适配器都可用。) - login_form_timeout - 整数值,指定登录表单的CSRF安全字段的超时时间(以秒为单位)。默认值是300秒。
- user_form_timeout - 整数值,指定注册表单的CSRF安全字段的超时时间(以秒为单位)。默认值是300秒。
- use_redirect_parameter_if_present - 布尔值,如果指定了重定向GET参数,则在认证成功后(如果存在,GET参数将覆盖下面指定的login_redirect_route)将用户重定向到指定的URL。
- login_redirect_route - 字符串值,应用程序中用户成功登录后将重定向到的路由名称。
- logout_redirect_route - 字符串值,用户注销后将重定向到的应用程序中的路由名称。
- password_cost - 这应该是一个介于4到31之间的整数。该数字代表用于散列的迭代计数的以2为底的对数。默认是
10
(在i5上约为每秒10次散列)。 - enable_user_state - 布尔值,启用用户状态的使用。在注册/登录过程中是否应该使用用户的状态?
- default_user_state - 整数值,注册时的默认用户状态。注册时用户应处于什么状态?
- allowed_login_states - 数组值,允许用户登录的状态。当用户尝试登录时,他的/她的状态是否是以下状态之一?如果您想允许没有状态的用户登录,请包含null。
更改注册验证码元素
注意:这些说明目前已过时。
默认情况下,用户注册使用的是Figlet验证码引擎。这是因为它是唯一一个不需要API密钥的引擎。可以使用依赖注入(DI)更换验证码引擎。例如,要更换为Recaptcha,您需要将以下内容添加到您的配置文件之一中(global.config.php、module.config.php或专用的recaptcha.config.php)
<?php
// ./config/autoload/recaptcha.config.php
return array(
'di'=> array(
'instance'=>array(
'alias'=>array(
// OTHER ELEMENTS....
'recaptcha_element' => 'Zend\Form\Element\Captcha',
),
'recaptcha_element' => array(
'parameters' => array(
'spec' => 'captcha',
'options'=>array(
'label' => '',
'required' => true,
'order' => 500,
'captcha' => array(
'captcha' => 'ReCaptcha',
'privkey' => RECAPTCHA_PRIVATE_KEY,
'pubkey' => RECAPTCHA_PUBLIC_KEY,
),
),
),
),
'ZfcUser\Form\Register' => array(
'parameters' => array(
'captcha_element'=>'recaptcha_element',
),
),
),
),
);