北软科技 / yii-account
为Yii PHP框架提供基本账户功能的扩展。
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
This package is not auto-updated.
Last update: 2022-04-11 14:54:03 UTC
README
为Yii PHP框架提供基本账户功能的扩展。
为什么我要这个
该项目受到[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 bool 是否启用账户激活(默认为true)。
- enableCaptcha bool 是否在注册时启用验证码(默认为false)。
- numAllowedFailedLogins int 用户在账户被锁定之前可以失败的登录次数(默认为10)。
- loginExpireTime int 登录cookie过期时间(默认为30天)。
- activateExpireTime int 账户激活过期时间(默认为30天)。
- resetPasswordExpireTime int 密码重置过期时间(默认为1天)。
- passwordExpireTime int 密码过期时间(默认为禁用)。
- lockoutExpireTime int 账户锁定过期时间(默认为10分钟)。
- fromEmailAddress string 发送邮件时使用的发件人电子邮件地址。
- messageSource string 模块使用的消息源组件。
- registerStyles bool 是否注册默认样式。
- defaultLayout string 模块内部使用的布局路径别名。
用法
现在,当您访问以下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 忘记密码表单
- captchaAction \CCaptchaAction 渲染验证码图像的动作类
- captchaWidget \CCaptcha 在视图中渲染验证码元素的控件类
自定义控制器
如果您想使用自己的控制器,可以使用模块的控制器映射功能进行映射。
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', ),
通常,您需要复制模块下的所有视图,但我们已经简化了这一过程,您只需覆盖所需的视图,模块将自动在父模块下查找默认视图。
源代码也相当详细地进行了文档编制,因此了解如何正确扩展的最简单方法是深入研究代码并了解功能背后的逻辑。此外,如果您有任何改进的想法,请随时提交问题或创建一个pull-request。
贡献
如果您想为此项目做出贡献,请随时为 develop
分支创建一个pull-request。
运行测试套件
要运行测试套件,您需要运行以下命令
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。