rarog/user-authenticator

适用于Laminas的通用用户注册和认证模块。支持Laminas\Db。

dev-master 2020-04-13 13:23 UTC

This package is auto-updated.

Last update: 2024-09-13 23:33:15 UTC


README

Build Status Coverage Status

基于Evan Coury和ZF-Commons团队的ZfcUser

简介

UserAuthenticator是Laminas的用户注册和认证模块。UserAuthenticator为在Laminas网站上添加用户认证和注册提供基础。它设计得非常简单,易于扩展。

需求

如果您正在寻找基于ZendFramework的版本,请查看原始的ZfcUser

特性/目标

  • 通过用户名、电子邮件或两者进行认证(可以选择放弃用户名概念,仅使用电子邮件)
  • 用户注册
  • 表单具有防CSRF保护
  • 强大的事件系统,允许扩展
  • 提供ActionController插件和视图辅助工具

安装

主要设置

通过composer

使用Composer安装模型

$ composer require rarog/user-authenticator

安装后

  1. 在您的application.config.php文件中启用它。

    <?php
    return [
        'modules' => [
            // ...
            'UserAuthenticator',
        ],
        // ...
    ];
  2. 然后导入位于./vendor/rarog/user-authenticator/data/中的适当SQL架构。

安装后:Laminas\Db

  1. 如果您在服务管理器配置中还没有有效的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::class => \Laminas\Db\Adapter\AdapterServiceFactory::class,
        ),
    ),
);

导航到http://yourproject/user,您应该会登录到登录页面。

密码安全性

不要更改密码哈希设置的默认值,除非A)您已经进行了充分的研究并完全理解您正在更改的内容,并且 B)您有一个非常具体的理由要偏离默认设置。

如果您计划更改默认密码哈希设置,请阅读以下内容

可以在任何时候更改密码哈希设置,而不会使现有用户帐户无效。现有用户密码将在下一次成功登录时自动重新哈希。

警告:更改默认密码哈希设置可能会导致严重问题,例如使您的哈希密码更容易受到暴力攻击,或者使哈希计算过于昂贵,以至于用户登录和注册速度慢得无法接受,并给您的服务器造成巨大负担。默认设置提供了一个非常好的平衡,适合2013年的计算能力。

选项

ZfcUser模块有一些选项,允许您快速自定义基本功能。安装ZfcUser后,将./vendor/rarog/user-authenticator/config/user-authenticator.global.php.dist复制到./config/autoload/user-authenticator.global.php,并根据需要更改值。

以下选项可用

  • user_entity_class - 要使用的实体类名称。如果您想使用自己的实体类而不是默认类,则非常有用。默认为\UserAuthenticator\Model\User::class
  • enable_username - 布尔值,启用注册表单上的用户名字段。默认为false
  • auth_identity_fields - 数组值,指定用户在登录时可以作为“身份”字段使用的字段。可接受值:用户名,电子邮件。
  • 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 之间的整数。该数字表示用于散列的迭代次数的 2 的对数。默认值为 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 [
    'di' => [
        'instance' => [
            'alias' => [
                // OTHER ELEMENTS....
                'recaptcha_element' => \Laminas\Form\Element\Captcha::class,
            ],
            'recaptcha_element' => [
                'parameters' => [
                    'spec' => 'captcha',
                    'options' => [
                        'label' => '',
                        'required' => true,
                        'order' => 500,
                        'captcha' => [
                            'captcha' => 'ReCaptcha',
                            'privkey' => RECAPTCHA_PRIVATE_KEY,
                            'pubkey' => RECAPTCHA_PUBLIC_KEY,
                        ],
                    ],
                ],
            ],
            \UserAuthenticator\Form\Register::class => [
                'parameters' => [
                    'captcha_element' => 'recaptcha_element',
                ],
            ],
        ],
    ],
];