azamath/yii-account

为 Yii PHP 框架提供基本账户功能的扩展。nordsoftware/yii-account 的副本

维护者

详细信息

github.com/azamath/yii-account

源代码

安装: 8

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 11

类型:yii-extension

1.2.1 2014-06-11 13:13 UTC

This package is auto-updated.

Last update: 2024-09-21 20:43:42 UTC


README

Latest Stable Version Build Status Scrutinizer Code Quality

为 Yii PHP 框架提供基本账户功能的扩展。

为什么需要这个

此项目受 [http://github.com/mishamx/yii-user](yii-user "http://github.com/mishamx/yii-user") 模块启发,并遵循框架的最佳实践,结合我们的 Yii 专业知识精心开发。它更安全,因为它使用 bcrypt 加密盐值密码,而不是密码散列。它还支持发送具有真正随机认证令牌的邮件,这些令牌会过期。

我们目前正在开发额外的安全功能(在下面的需求中列出)。

用户界面

Login
Signup
Forgot password
Change password

需求

  • 安全账户(密码+盐)完成
  • 注册 完成
  • 账户激活(默认启用) 完成
  • 登录/注销 完成
  • 重置密码 完成
  • 发送邮件(带令牌验证) 完成
  • 每 x 天要求新密码(默认禁用) 完成
  • 密码历史(加密)以防止重复使用同一密码 完成
  • 在 x 次失败登录尝试后锁定账户(默认禁用) 完成
  • 用于创建账户的控制台命令 完成
  • 合适的 README 进行中

安装

安装此扩展最简单的方法是使用 Composer。

运行以下命令以下载扩展

php composer.phar require nordsoftware/yii-account:*

将以下内容添加到您的应用程序配置中

'modules' => array(
    'account' => array(
        'class' => '\nordsoftware\yii_account\Module',
    ),
),
'components' => array(
    'user' => array(
        'class' => '\nordsoftware\yii_account\components\WebUser',
    ),
),

要使用控制台命令,您需要将以下内容添加到控制台应用程序配置中

'commandMap' => array(
    'account' => array(
        'class' => '\nordsoftware\yii_account\commands\AccountCommand',
    ),
),

运行以下命令以应用数据库迁移(您需要为应用程序配置数据库)

php yiic.php migrate --migrationPath=account.migrations

不使用 Composer

如果您不使用 Composer,则需要手动下载依赖项,并将以下内容添加到您的应用程序配置中

'aliases' => array(
    '\nordsoftware\yii_account' => __DIR__ . '/relative/path/to/yii-account/src',
    '\YiiPassword' => __DIR__ . '/relative/path/to/yiipassword/src',
    '\RandomLib' => __DIR__ . '/relative/path/to/randomlib/lib',
    '\SecureLib' => __DIR__ . '/relative/path/to/securelib/lib',
),

依赖项

配置

以下配置适用于 \nordsoftware\yii_account\Module

  • classMap 数组 用于模块内部使用的类映射。
  • enableActivation 布尔值 是否启用账户激活(默认为 true)。
  • numAllowedFailedLogins 整数 用户在账户被锁定之前可以失败登录的次数(默认为 10)。
  • loginExpireTime 整数 登录 cookie 过期的秒数(默认为 30 天)。
  • activateExpireTime 整数 账户激活过期的秒数(默认为 30 天)。
  • resetPasswordExpireTime 整数 密码重置过期的秒数(默认为 1 天)。
  • passwordExpireTime 整数 密码过期的秒数(默认禁用)。
  • lockoutExpireTime 整数 账户锁定过期的秒数(默认为 10 分钟)。
  • 发送电子邮件地址 字符串 发送邮件时使用的电子邮件地址。
  • 消息源 字符串 用于模块的消息源组件。
  • registerStyles 布尔值 是否注册默认样式。
  • defaultLayout 字符串 在模块内使用的布局的路径别名。

用法

现在您应该能够在访问以下URL时看到登录页面

index.php?r=account

您可以通过以下命令在命令行生成账户

php yiic.php account create --username=demo --password=demo

扩展

此项目侧重于可重用性进行开发,因此在开始复制粘贴之前,请花些时间阅读本节,了解如何正确扩展此模块。

自定义账户模型

只要您将其添加到以下字段,您就可以使用自己的账户模型

  • username varchar(255) not null 账户用户名
  • password varchar(255) not null 账户密码
  • email varchar(255) not null 账户电子邮件
  • passwordStrategy varchar(255) not null 密码加密类型
  • requireNewPassword tinyint(1) not null default '0' 账户密码是否必须更改
  • createdAt timestamp null default current_timestamp 账户创建时间
  • lastActiveAt timestamp null default null 账户上次活跃时间
  • status int(11) default '0' 账户状态(例如:未激活,已激活)

更改扩展使用的模型非常简单,只需将其配置为使用您的类,并在模块的类映射中添加它即可。

'account' => array(
    'class' => '\nordsoftware\yii_account\Module',
    'classMap' => array(
        'account' => 'MyAccount', // defaults to \nordsoftware\yii_account\models\ar\Account
    ),
),

自定义模型、组件或表单类

您可以使用类映射来配置模块使用的任何类,以下是可用类的完整列表

  • account models\ar\Account 账户模型
  • token models\ar\AccountToken 账户令牌模型
  • loginHistory models\ar\AccountLoginHistory 登录历史模型
  • passwordHistory models\ar\AccountPasswordHistory 密码历史模型
  • userIdentity components\UserIdentity 用户身份
  • loginForm models\form\LoginForm 登录表单
  • passwordForm models\form\PasswordForm 处理密码的基本表单
  • signupForm models\form\SignupForm 注册表单(扩展passwordForm)
  • forgotPassword models\form\ForgotPasswordForm 忘记密码表单

自定义控制器

如果您想使用自己的控制器,您可以使用模块的控制器映射来映射它们。

array(
    'account' => array(
        'class' => '\nordsoftware\yii_account\Module',
        'controllerMap' => array(
            'authorize' => 'AuthorizeController', // defaults to \nordsoftware\yii_account\controllers\AuthorizeController
        ),
    ),
),

自定义视图

如果您想使用此模块的自定义视图,您可以通过将其放置在您的应用程序下的 protected\views\account 或您的主题下的 themes\views\account 来覆盖它们。

扩展模块本身

您可能还想扩展模块本身,例如,为了实现正确的电子邮件发送。在这种情况下,您可以扩展模块并覆盖必要的方法,并配置您的账户使用您的模块。

'account' => array(
    'class' => 'MyAccountModule',
),

通常您需要复制模块下的所有视图,但我们已经使其变得简单,您只需覆盖您需要的视图,模块将自动在父模块下查找默认视图。

源代码也相当有良好的文档记录,因此了解如何正确扩展的最简单方法是深入代码,了解功能背后的逻辑。此外,如果您有任何改进的想法,请随时提交问题或创建一个拉取请求。

贡献

如果您想为此项目做出贡献,请随时为 develop 分支创建一个拉取请求。

运行测试套件

要运行测试套件,您需要运行以下命令

export DB_HOST=<YOUR-DB-HOST> 
export DB_NAME=<YOUR-DB-NAME> 
export DB_USER=<YOUR-DB-USER> 
export DB_PASS=<YOUR-DB-PASS> 
export BASE_URL=<YOUR-BASE-URL>
erb tests/app/config/bootstrap.php.erb > tests/app/config/bootstrap.php
erb codeception.yml.erb > codeception.yml
erb tests/acceptance.suite.yml.erb > tests/acceptance.suite.yml

现在您可以使用以下命令来运行测试套件

vendor/bin/codecept run

翻译

如果您想翻译此项目,可以在 src/messages/templates 下找到翻译模板。完成翻译后,请向 develop 分支提交一个 pull-request。