azamath / yii-account
为 Yii PHP 框架提供基本账户功能的扩展。nordsoftware/yii-account 的副本
Requires
- crisu83/yiistrap: dev-bs3
- ircmaxell/random-lib: v1.0.0
- phpnode/yiipassword: >=1.0.3
Requires (Dev)
- codeception/codeception: *
- crisu83/yii-caviar: dev-develop#1859e55504f3a4076678c9b39843da604dfc43aa
- crisu83/yii-consoletools: *
- yiisoft/yii: >=1.1.14
README
为 Yii PHP 框架提供基本账户功能的扩展。
为什么需要这个
此项目受 [http://github.com/mishamx/yii-user](yii-user "http://github.com/mishamx/yii-user") 模块启发,并遵循框架的最佳实践,结合我们的 Yii 专业知识精心开发。它更安全,因为它使用 bcrypt 加密盐值密码,而不是密码散列。它还支持发送具有真正随机认证令牌的邮件,这些令牌会过期。
我们目前正在开发额外的安全功能(在下面的需求中列出)。
用户界面
需求
- 安全账户(密码+盐)完成
- 注册 完成
- 账户激活(默认启用) 完成
- 登录/注销 完成
- 重置密码 完成
- 发送邮件(带令牌验证) 完成
- 每 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', ),
依赖项
- Yiistrap http://github.com/crisu83/yiistrap
- YiiPassword https://github.com/phpnode/yiipassword
- RandomLib https://github.com/ircmaxell/RandomLib
- SecurityLib https://github.com/ircmaxell/SecurityLib
配置
以下配置适用于 \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。