upchuk/userapp-symfony

将Userapp.io服务集成到Symfony的用户提供者中。

dev-master 2015-06-13 16:29 UTC

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提供的更多功能(订阅、支付计划信息、社交账户集成等)。

如果您发现任何错误、问题或可以改进的地方,请提交一个问题,我会查看。