jairwin / user-bundle
此包为Symfony 3项目提供用户管理和表单。
Requires
README
此包为Symfony3项目提供用户管理和表单。
安装
步骤 1:下载包
打开命令行,进入项目目录,执行以下命令以下载此包的最新稳定版本
$ composer require jairwin/user-bundle
此命令需要您已全局安装Composer,如Composer文档中的安装章节所述。
步骤 2:启用包
通过将它们添加到app/AppKernel.php中注册的包列表中来启用包和依赖包。
// app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(), new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(), new EWZ\Bundle\RecaptchaBundle\EWZRecaptchaBundle(), new JAI\Bundle\UserBundle\JAIUserBundle(), ); // ... } // ... }
步骤 3:添加路由
要添加提供的路由,请更新app/config/routing.yml
# app/config/routing.yml jai_user: resource: "@JAIUserBundle/Resources/config/routing.yml" prefix: / logout: path: /logout
步骤 4:配置ReCaptcha
此包使用EZRecaptchaBundle,配置在app/config/config.yml中(文档:EWZRecaptcha on GitHub)
# app/config/config.yml ewz_recaptcha: public_key: here_is_your_public_key private_key: here_is_your_private_key locale_key: %kernel.default_locale%
对于开发,您需要在生产环境之外的所有地方提供单独的配置,使用公开的测试密钥(文档:Google Recaptcha FAQ)。您可以将密钥存储在parameters.yml中,或者将ewz_recaptcha配置添加到config_dev.yml、config_prod.yml和config_test.yml而不是config.yml中。
步骤 5:启用翻译
要获取正确的表单标签和占位符,请启用翻译。在新的Symfony3项目中,需要在app/config/config.yml中取消注释。
# app/config/config.yml framework: translator: { fallbacks: ["%locale%"] }
并在app/config/parameters.yml中设置区域设置
# app/config/parameters.yml locale: en
注意 - 到目前为止,此包只提供了英文翻译。大多数默认值都很丑陋。
步骤 6:配置必需参数
确保在app/config/parameters.yml中您的数据库和邮件发送参数正确。您还需要添加site_name和from_email参数。
# app/config/parameters.yml parameters: database_host: 127.0.0.1 database_port: null database_name: your_database_name database_user: your_database_user database_password: your_database_user_password mailer_transport: smtp mailer_host: 127.0.0.1 mailer_user: your_mail_user mailer_password: your_mail_password secret: somethingmorerandomthanthis locale: en # JAI User Bundle Configuration site_name: My Great Website from_email: greeter@yourdomain.tld
步骤 7:配置安全
根据您的需要配置安全(文档:Symfony Book中的安全)。这里有一个您可以开始的示例
# app/config/security.yml security: encoders: JAI\Bundle\UserBundle\Entity\User: algorithm: bcrypt role_hierarchy: ROLE_ADMIN: ROLE_USER # https://symfony.com.cn/doc/current/book/security.html#where-do-users-come-from-user-providers providers: our_db_provider: entity: class: JAIUserBundle:User firewalls: # disables authentication for assets and the profiler, adapt it according to your needs dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: anonymous: ~ form_login: login_path: jai_user_login check_path: jai_user_login username_parameter: login[username] password_parameter: login[password] provider: our_db_provider logout: path: /logout target: / remember_me: secret: "preferablysomethingmoresecretthanthis" remember_me_parameter: login[remember] access_control: # require ROLE_ADMIN for /admin* #- { path: ^/admin, roles: ROLE_ADMIN } # require ROLE_USER for /user* - { path: ^/user, roles: ROLE_USER }
目前,我们已经禁用了管理员页面的防火墙,这有原因。我们稍后会修复它。
步骤 8:初始化数据库
从控制台更新数据库模式并加载初始角色
$ php bin/console doctrine:schema:update --force $ php bin/console doctrine:fixtures:load
步骤 9:创建管理员用户
此时所有路由都应该工作,因此您可以通过访问/register来注册新用户。如果电子邮件配置正确,则会发送激活电子邮件。使用激活电子邮件中的链接将使您进入带有消息“您的账户现在已激活”的登录页面。现在转到/admin/user,点击您新用户的名字,您将看到显示的个人信息。找到“可用角色”下名为“ROLE_ADMIN”的按钮并点击它。选定的用户将更新为角色ROLE_ADMIN。
步骤 10:保护管理员页面
现在我们有了管理员用户,我们将在app/config/security.yml中修复管理员防火墙。只需取消注释即可
# app/config/security.yml access_control: # require ROLE_ADMIN for /admin* - { path: ^/admin, roles: ROLE_ADMIN } # require ROLE_USER for /user* - { path: ^/user, roles: ROLE_USER }
现在您只能以具有角色ROLE_ADMIN的用户登录访问/admin/user(实际上由于您可能还有其他管理页面,所以是/admin/*)。
使用:
此包提供了/register、/activate、/login、/logout、/user/profile、/forgot、/reset和/admin/user等路由。它们的目的应该不言而喻。表单使用Symfony表单组件(文档:Symfony Book中的表单),因此它们将使用表单主题(文档:Symfony Book中的表单主题)。
为了使路由在视觉上与您自己的网站保持一致,首先重写UserBundle/Resources/views/base.html.twig以扩展您自己的模板。
{# UserBundle/Resources/views/base.html.twig #} {% extends 'base.html.twig' %} {% block body %} {% block user %}{% endblock %} {% endblock %}
升级:
某些升级将包括数据库模式更改。更新后,您可能需要备份您的数据库并运行doctrine迁移。
$ php bin/console doctrine:migrations:diff $ php bin/console doctrine:migrations:migrate
总是首先备份您的数据库!例如,v1.1.0重命名了表以避免可能的冲突。Doctrine将其差异作为DROP旧_table_name,ADD新_table_name。在这种情况下,阅读差异会告诉您将发生什么,并且您需要备份来将用户、角色和用户角色连接表数据恢复到重命名的表中。
待办事项:
单元测试:
目前没有单元测试,这显然是不正确的。
移除EWZRecaptchaBundle依赖:
如果有一个可选设置,例如“使用验证码”,然后进一步设置,例如仅在达到一定数量的垃圾邮件后要求,以及与当前项目中使用的任何验证码实现相关的具体设置,那就更好了。
用户管理功能:
应在管理页面上添加“删除用户”。目前,您只能通过直接访问数据库来删除用户。
“删除非活动用户” - 指定自注册以来的天数,以显示未激活的账户。视图应是一个包含每个非活动用户的复选框的表格,以及一个“删除标记”按钮。
目前用户是从用户名下拉列表中选择进行编辑的。需要一个“查找用户”功能,可以通过用户名或电子邮件进行搜索。这对于拥有大量用户的网站尤其需要。
用户管理管理角色:
这有点棘手,因为理想情况下,您应该能够添加角色并更改层次结构。目前,角色在数据库中,而层次结构在app/config/security.yml中。