lampi87 / lmc-user
Laminas通用的用户注册和身份验证模块。支持Laminas\Db和Doctrine2。
Requires
- php: ^7.3 || ^8.0
- laminas/laminas-authentication: ^2.7
- laminas/laminas-crypt: ^3.0
- laminas/laminas-db: ^2.11
- laminas/laminas-form: ^3.0
- laminas/laminas-http: ^2.11
- laminas/laminas-hydrator: ^4.1
- laminas/laminas-i18n: ^2.10
- laminas/laminas-inputfilter: ^2.10
- laminas/laminas-loader: ^2.6
- laminas/laminas-modulemanager: ^2.8
- laminas/laminas-mvc: ^3.0
- laminas/laminas-mvc-plugin-flashmessenger: ^1.2
- laminas/laminas-mvc-plugin-prg: ^1.2
- laminas/laminas-servicemanager: ^3.0
- laminas/laminas-session: ^2.9
- laminas/laminas-stdlib: ^3.0
- laminas/laminas-validator: ^2.13
- laminas/laminas-view: ^2.11
Requires (Dev)
- laminas/laminas-captcha: ^2.6
- phpmd/phpmd: ^2.7.0
- phpunit/phpunit: ^9.5.4
- squizlabs/php_codesniffer: ^3.5.5
Suggests
- laminas/laminas-captcha: Laminas\Captcha if you want to use the captcha component
README
基于Evan Coury和ZF-Commons团队编写的ZfcUser
简介
LmcUser是Laminas的用户注册和身份验证模块。LmcUser为将用户身份验证和注册添加到您的Laminas网站提供了基础。它设计得非常简单,易于扩展。
更多信息及示例可在LmcUser Wiki找到
要求
- Laminas (最新主分支)
特性/目标
- 通过用户名、电子邮件或两者同时验证(可以选择不使用用户名而仅使用电子邮件)[已完成]
- 用户注册[已完成]
- 表单受CSRF保护[已完成]
- 默认支持Doctrine2 和 Laminas\Db [已完成]
- 强大的事件系统,允许扩展[已完成]
- 提供ActionController插件和视图辅助函数[已完成]
安装
主要设置
使用Composer
-
在您的composer.json中添加此项目
"require": { "lm-commons/lmc-user": "^3.1" }
-
现在运行以下命令以让Composer下载LmcUser
$ php composer.phar update
安装后
-
在您的application.config.php文件中启用它。
<?php return array( 'modules' => array( // ... 'LmcUser', ), // ... );
安装后:Laminas\Db
- 如果您在服务管理器配置中还没有有效的Laminas\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( 'Laminas\Db\Adapter\Adapter' => 'Laminas\Db\Adapter\AdapterServiceFactory', ), ), );
导航到http://yourproject/user,您应该会看到登录页面。
从ZfcUser迁移
如果使用Zend DB,请将表名更新为lmc_user
将所有ZfcUser命名空间引用替换为LmcUser
更新对键zfcuser的引用到lmcuser
密码安全
不要更改密码哈希设置,除非您A) 已进行充分研究并完全了解您正在更改的内容,并且B) 您有非常具体的原因偏离默认设置。
如果您计划更改默认密码哈希设置,请阅读以下内容
可以在任何时候更改密码哈希设置,而不会使现有用户帐户无效。现有用户密码将在下一次成功登录时自动重新哈希。
警告:更改默认密码哈希设置可能会引起严重问题,例如使您的哈希密码更容易受到暴力攻击或使哈希过程变得过于昂贵,导致用户登录和注册速度极慢,并在您的服务器上产生巨大的负担。提供的默认设置在两者之间提供了非常好的平衡,适合2013年的计算能力。
选项
LmcUser模块提供了一些选项,允许您快速自定义基本功能。安装LmcUser后,将./vendor/lm-commons/lmc-user/config/lmcuser.global.php.dist复制到./config/autoload/lmcuser.global.php,并根据需要更改值。
以下选项可用
- user_entity_class - 要使用的Entity类的名称。如果您想使用自己的实体类而不是默认提供的实体类,则很有用。默认是
LmcUser\Entity\User。 - enable_username - 布尔值,启用注册表单上的用户名字段。默认值是
false。 - auth_identity_fields - 数组值,指定用户在登录时可以作为“身份”字段使用的字段。可接受的值:username,email。
- enable_display_name - 布尔值,启用注册表单上的显示名称字段。默认值是
false。 - enable_registration - 布尔值,确定是否允许用户注册。默认值为
true。 - login_after_registration - 布尔值,用户成功注册后自动登录。默认值为
false。 - use_registration_form_captcha - 布尔值,确定是否在用户注册表单上使用验证码。默认值为
true。 (注意,目前这仅使用弱 Laminas\Text\Figlet 验证码,但我有计划让所有 Laminas\Captcha 适配器都能使用。) - login_form_timeout - 整数值,指定登录表单 CSRF 安全字段的超时时间(秒)。默认值为 300 秒。
- user_form_timeout - 整数值,指定注册表单 CSRF 安全字段的超时时间(秒)。默认值为 300 秒。
- use_redirect_parameter_if_present - 布尔值,如果指定了重定向 GET 参数,且认证成功,则用户将被重定向到指定的 URL(如果存在,GET 参数将覆盖下文指定的 login_redirect_route)。
- login_redirect_route - 字符串值,应用程序中用户登录成功后将被重定向到的路由名称。
- logout_redirect_route - 字符串值,应用程序中用户登出后将被重定向到的路由名称。
- password_cost - 应该是一个介于 4 和 31 之间的整数。该数字表示用于哈希的迭代计数的二进制对数。默认为
10(大约每秒 10 次哈希,在 i5 处理器上)。 - 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' => 'Laminas\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,
),
),
),
),
'LmcUser\Form\Register' => array(
'parameters' => array(
'captcha_element'=>'recaptcha_element',
),
),
),
),
);