upchuk / userapp-symfony
将Userapp.io服务集成到Symfony的用户提供者中。
Requires
- php: >=5.4.0
- symfony/symfony: >=2.6.0
- userapp/userapp: ~1.2.2
This package is not auto-updated.
Last update: 2024-09-24 16:33:32 UTC
README
使用这个库,您可以使用UserApp.io来管理可以与您的Symfony应用程序进行身份验证的用户。有关Symfony安全性的更多信息,请参阅文档。
功能
- 存储在UserApp.io中的所有用户都可以登录/登出,但它们必须至少有一个权限,最好是与Symfony角色相关联。
- 用户信息(基本信息、权限和属性)在登录到Symfony用户会话时存储,以避免在每个请求中对API进行调用。这意味着只有当用户再次登录时,这些数据才会在Symfony应用程序中刷新。
- 在每个请求中,可以向API发送心跳以延长UserApp.io令牌的生命周期。这也意味着如果UserApp.io令牌在此期间已过期,则Symfony会话将被销毁 -> 用户将被强制重新登录。
- 您可以选择是否在每个请求上发送心跳请求,或者在上一个请求后经过定义的分钟数。
- 如果您在UserApp.io中锁定用户,则锁定状态将在下一个请求中通过心跳更新Symfony用户的锁定状态。
- 有一个可用的服务,您可以用来管理密码重置和更改。
安装
您可以使用composer安装此库
{
"require": {
"upchuk/userapp-symfony": "dev-master"
}
}
(将遵循semver版本发布标签)
在开始使用此包之前,请确保您的UserApp.io用户至少启用了一个权限。这些权限在Symfony中用作角色,并缓存在用户会话中。
一旦该包在您的 vendors 文件夹中,您就需要导入库中提供的 services.yml
文件。假设您的自己的 services.yml
文件位于默认的 app/config
文件夹中,将其添加到其中
imports:
- { resource: '../../vendor/upchuk/userapp-symfony/services.yml' }
确保您根据您的目录结构调整路径。
配置
必需
安全配置
编辑 security.yml
文件并添加新的用户提供者和防火墙身份验证提供者
用户提供者
providers:
user_app:
id: user_app_provider
防火墙
firewalls:
demo_secured_area:
pattern: ^/secured/path
simple_form:
authenticator: user_app_authenticator
check_path: _demo_security_check
login_path: _demo_login
logout:
path: _demo_logout
handlers: [user_app_logout]
target: _demo
authenticator
键指定了在 simple_form
身份验证类型中使用的身份验证器类(有关此类身份验证的更多信息,请参阅此处)。
handlers
键指定了当用户注销时实例化和调用的服务(在此情况下用于从UserApp.io服务中注销用户)。
其余部分是Symfony自定义防火墙的示例设置。确保您阅读了文档以获取更多信息。
应用ID
您需要在您的 parameters.yml
文件中创建一个名为 userapp_id
的参数,其中包含您的UserApp.io账户的应用ID
可选
参数
userapp_heartbeat_frequency: ~
使用此选项,您可以指定在发送新心跳请求之前需要经过的分钟数(以秒为单位)。将此设置为0将在每次认证页面刷新时发送请求。默认值为 2700
(45分钟)。
userapp_admin_token: ~
使用此选项,您可以指定从UserApp.io获取的您的管理员令牌。此参数**是必需的**,如果您想使用以下所述的密码重置功能。
密码重置
您可以使用一项服务(user_app_password_change
)来重置和/或更改当前用户的密码。
重置当前用户密码并根据生成的安全令牌更改密码的示例用法
$changer = $this->get('user_app_password_change');
try {
$token = $changer->resetPassword('the_username');
$changed = $changer->changePassword(array(
'token' => $token,
'new_password' => 'new_password',
));
}
catch(PasswordChangeException $e) {
// $e->getMessage() == 'No admin token set.';
// $e->getMessage() == 'Invalid token.';
// $e->getMessage() == 'User not found.';
}
此技术的目的是提供一个表单,让人们可以通过提供用户名来重置自己的密码。基于此,您可以请求一个密码更改令牌,并将其附加到您在电子邮件中发送给用户的链接。当他们点击该链接时,您检索令牌并使用它来更改密码。这是标准的“忘记我的密码”模式。
密码更改
除了重置密码之外,您还可以更改当前登录用户的密码
$changer = $this->get('user_app_password_change');
try {
$changed = $changer->changePassword(array(
'old_password' => 'old_password',
'new_password' => 'new_password',
));
}
catch(PasswordChangeException $e) {
// $e->getMessage() == 'Invalid current password.';
// $e->getMessage() == 'User not found.';
}
用户更改自己密码的标准模式。为此,您不需要将管理员令牌设置为参数。
开发
我计划根据需要扩展此功能,以包含UserApp提供的更多功能(订阅、支付计划信息、社交账户集成等)。
如果您发现任何错误、问题或可以改进的地方,请提交一个问题,我会查看。