ndsoftware / yii2-account
Yii 框架的账户模块。
Requires
- php: >=5.5.0
- guzzlehttp/guzzle: ^6.2
- ircmaxell/random-lib: >=v1.0
- sparkpost/php-sparkpost: ^1.0
- yiisoft/yii2: >=2.0
- yiisoft/yii2-authclient: >=2.0
- yiisoft/yii2-bootstrap: >=2.0
Requires (Dev)
- codeception/codeception: ^2.1
- codeclimate/php-test-reporter: dev-master
- yiisoft/yii2-codeception: >=2.0
- yiisoft/yii2-debug: >=2.0
- yiisoft/yii2-faker: >=2.0
- yiisoft/yii2-gii: >=2.0
This package is not auto-updated.
Last update: 2022-04-11 14:50:36 UTC
README
为 Yii 框架提供一个常用账户功能的模块。
为什么需要这个
该项目受到http://github.com/mishamx/yii-user 和 https://github.com/dektrium/yii2-user 模块的双重启发,并按照框架的最佳实践,结合我们对 Yii 的专业知识精心开发。该模块使用 Yii 的自有密码方法 yii\base\Security
,您也可以实现我们的 PasswordHasherInterface
以不同的方式散列密码。其他功能包括发送邮件和创建身份验证令牌的接口;各种密码安全特性等等。更多详情请参阅下方的功能部分。
功能
- 安全账户(bcrypt 加密) 完成
- 可选的注册流程(默认启用) 完成
- 注册时支持验证码 完成
- 可选的账户激活(默认启用) 完成
- 登录 / 登出 完成
- 通过第三方服务进行注册和登录 完成
- 重置密码 完成
- 发送邮件(带有令牌验证) 完成
- 每 x 天需要更改密码(默认禁用) 完成
- 密码历史(加密)以防止重复使用相同的密码 完成
- 在 x 次失败的登录尝试后锁定账户(默认禁用) 完成
- 用于创建账户的控制台命令 完成
安装
安装此扩展的首选方式是通过 composer。
运行以下命令:
php composer.phar require --prefer-dist nordsoftware/yii2-account "*"
或
"nordsoftware/yii2-account": "*"
将其添加到您的 composer.json
文件的“require”部分。
在您可以使用该模块之前,您需要应用其数据库迁移。为此,请运行以下命令
yii migrate --migrationPath="vendor/nordsoftware/yii2-account/src/migrations"
用法
安装扩展后,只需按以下方式修改您的应用程序配置
return [ 'bootstrap' => [ 'nord\yii\account\Bootstrap' // ... ], 'modules' => [ 'account' => 'nord\yii\account\Module', // ... ], // ... ];
配置
以下配置可用于 nord\yii\account\Module
类
- classMap 数组 在模块内部使用类映射。
- enableActivation 布尔值 是否启用账户激活(默认为
true
)。 - enableSignup 布尔值 是否启用注册流程(默认为
true
)。 - enableCaptcha 布尔值 是否在注册时启用验证码(默认为
false
)。 - enableClientAuth 布尔值 是否启用客户端身份验证(默认为
false
)。 - userConfig 数组 传递给
yii\web\User
的配置。 - passwordConfig 数组 传递给
PasswordStrengthValidator
的配置。 - captchaConfig 数组 传递给
CaptchaAction
的配置。 - clientAuthConfig 数组 传递给
yii\authclient\Collection
的配置。 - urlConfig 数组 模块使用的 URL 的配置。
- usernameAttribute 字符串 用户名属性的名称(默认为
username
)。 - emailAttribute 字符串 电子邮件属性的名称(默认为
email
)。 - passwordAttribute 字符串 密码属性的名称(默认为
password
)。 - messageSource 字符串 用于模块的消息源组件。
- messagePath 字符串 用于模块的消息路径。
参数
以下参数适用于 nord\yii\account\Module
类
- fromEmailAddress 字符串 发送电子邮件时使用的发件人电子邮件地址。
- numAllowedFailedLoginAttempts 整数 在账户被锁定之前允许的失败登录尝试次数(默认为 10)。
- minUsernameLength 整数 用户名的最小长度(默认为 4)。
- minPasswordLength 整数 密码的最小长度(默认为 6)。
- loginExpireTime 整数 登录cookie过期的时间(默认为 30天)。
- activateExpireTime 整数 账户激活过期的时间(默认为 30天)。
- resetPasswordExpireTime 整数 密码重置过期的时间(默认为 1天)。
- passwordExpireTime 整数 密码过期的时间(默认为禁用)。
- lockoutExpireTime 整数 账户锁定过期的时间(默认为 10分钟)。
- tokenExpireTime 整数 授权令牌过期的时间(默认为 1小时)。
使用方法
现在您应该能够在访问以下 URL 时看到登录页面
index.php?r=account OR index.php/account
您可以使用以下命令从命令行生成一个账户
yii account/create demo demo1234
扩展
该项目注重可重用性,因此在开始复制粘贴之前,请花点时间阅读本节,了解如何正确扩展此模块。
自定义账户模型
只要您将其添加到模型中,就可以使用自己的账户模型
- username varchar(255) not null 账户用户名
- password varchar(255) not null 账户密码
- authKey varchar(255) not null 用于cookie认证的认证密钥
- email varchar(255) not null 账户电子邮件
- lastLoginAt datetime null default null 用户最后一次登录的时间
- createdAt datetime null default null 账户创建的时间
- status int(11) default '0' 账户状态(例如:未激活、已激活)
更改扩展使用的模型很容易,只需将其配置为使用您的类,并将其添加到模块的类映射中即可
'account' => [ 'class' => 'nord\yii\account\Module', 'classMap' => [ 'account' => 'MyAccount', ], ],
自定义模型
您可以使用类映射来配置模块使用的任何类,以下是所有可用类的完整列表
- account models\Account 账户模型
- token models\AccountToken 账户令牌模型
- provider models\AccountProvider 账户提供者模型
- loginHistory models\AccountLoginHistory 登录历史记录模型
- passwordHistory models\AccountPasswordHistory 密码历史记录模型
- loginForm models\LoginForm 登录表单
- passwordForm models\PasswordForm 处理密码的基本表单
- signupForm models\SignupForm 注册表单
- connectForm models\ConnectForm 连接表单
- 忘记密码 models\ForgotPasswordForm 忘记密码表单
- passwordBehavior behaviors\PasswordAttributeBehavior 密码属性行为
- passwordValidator validators\PasswordStrengthValidator 密码强度验证器
- webUser yii\web\User 网络用户组件
- captcha yii\captcha\Captcha 验证码小部件
- captchaAction yii\captcha\CaptchaAction 验证码动作
自定义控制器
如果您想使用自己的控制器,可以使用模块的控制器映射来映射它们。
'account' => [ 'class' => 'nord\yii\account\Module', 'controllerMap' => [ 'authenticate' => 'MyAuthenticateController', ], ],
自定义组件
如果您想更改模块使用的组件,这里有一个可用的接口的完整列表。
- dataContract components\datacontract\DataContractInterface 模块与其数据模型之间的抽象层(默认为
DataContract
) - mailSender components\mailsender\MailSenderInterface 用于发送电子邮件的组件(默认为
YiiMailSender
) - passwordHasher components\passwordhasher\PasswordHasherInterface 用于散列密码的组件(默认为
YiiPasswordHasher
) - tokenGenerator components\tokengenerator\TokenGeneratorInterface 用于生成随机令牌的组件(默认为
YiiTokenGenerator
)
在创建自己的实现之前,您可以查看捆绑的实现,因为我们已经支持例如通过Mandrill发送邮件。
贡献
如果您想为此项目做出贡献,请随意向 develop
分支创建拉取请求。
运行测试
即将推出 …
翻译
如果您想翻译此项目,您可以在 messages/templates
下找到翻译模板。完成翻译后,您应该向 develop
分支创建拉取请求。