fbeen / userbundle
此Bundle在Symfony安全Bundle的基础上添加了完整的用户集成。它允许您注册和管理网站用户,并让用户使用或不需要如Facebook或Google等提供者登录,编辑他们的个人资料,更改或重置他们的密码。
V1.0.8
2017-09-23 12:41 UTC
Requires
- php: ^5.5.9|^7.0
- fbeen/mailerbundle: ^1.0
- hybridauth/hybridauth: ^2.7
- symfony/framework-bundle: ^2.7|^3.0
README
此Bundle在Symfony安全Bundle的基础上添加了完整的用户集成。它允许您注册和管理网站用户,并让用户使用或不需要如Facebook或Google等提供者登录,编辑他们的个人资料,更改或重置他们的密码。
功能包括
- 使用Doctrine ORM数据库存储您自己的用户类
- 准备好Bootstrap的页面和表单
- 使用传统登录表单或使用OAuth提供者(如Facebook、Google或Twitter)登录
- 仅使用他们的电子邮件地址和密码登录
- 注册时验证电子邮件地址或不验证
- 注册时管理员批准或不批准
- 注册时发送或不对发送确认电子邮件
- 显示和编辑个人资料(带或不带密码保护)
- 更改密码
- 重置密码
- 使用您自己的用户实体
- 使用您自己的表单类型
- 可配置的密码约束
安装
使用composer
- 将
"fbeen/userbundle": "dev-master"
添加到您的composer.json项目文件的require部分。
"require": {
...
"fbeen/userbundle": "dev-master"
},
-
运行composer update
$ composer update
-
将bundle添加到app/AppKernel.php
$bundles = array(
...
new Fbeen\MailerBundle\FbeenMailerBundle(),
new Fbeen\UserBundle\FbeenUserBundle(),
);
- 添加路由到app/config/routing.yml
fbeen_user:
resource: "@FbeenUserBundle/Resources/config/routing.yml"
prefix: /
- 在您的twig布局中将空
{% block fbeen_user %}
放置在内容应出现的位置。通常在{% block body %}
和{% endblock %}
标签之间。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>{% block title %}Welcome!{% endblock %}</title>
{% block stylesheets %}{% endblock %}
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
</head>
<body>
{% block body %}
{% block fbeen_user %}{% endblock %}
{% endblock %}
{% block javascripts %}{% endblock %}
</body>
</html>
- 在
app/config/config.yml
中启用翻译
parameters:
locale: en
framework:
translator: { fallbacks: ["%locale%"] }
- 按如下配置
app/config/security.yml
security:
encoders:
AppBundle\Entity\User:
algorithm: bcrypt
cost: 12
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
our_db_provider:
entity:
class: AppBundle:User
property: email
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: ~
pattern: ^/
provider: our_db_provider
form_login:
login_path: /login
check_path: /login_check
csrf_token_generator: security.csrf.token_manager # FOR SYMFONY 2.7 OR BELOW USE: csrf_provider: security.csrf.token_manager
logout:
path: /logout
target: /
access_control:
# require ROLE_SUPER_ADMIN for /admin/app/user*
- { path: ^/admin/app/user, roles: ROLE_SUPER_ADMIN }
# require ROLE_ADMIN for /admin*
- { path: ^/admin, roles: ROLE_ADMIN }
- 在您的AppBundle中添加一个用户实体
src/AppBundle/Entity/User.php
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
/**
* @ORM\Table(name="users")
* @ORM\Entity
*/
class User implements AdvancedUserInterface, \Serializable
{
use \Fbeen\UserBundle\Model\UserTrait;
/*
* Extend your class here when you need
*/
}
- 更新您的数据库模式
$ bin/console doctrine:schema:update --force
- 创建一个新用户并将其提升为ROLE_SUPER_ADMIN
$ bin/console fbeen:user:create "My Name" "email@example.com" "password"
$ bin/console fbeen:user:promote "My Name" ROLE_SUPER_ADMIN
- 在
app/config/config.yml
中添加FbeenMailerBundle的最小配置
fbeen_mailer:
company_name: "php-programmer.nl"
company_logo: "https://www.php-programmer.nl/images/logo.png"
mailaddresses:
noreply:
email: no-reply@example.com # required
name: example.com # optional
general:
email: info@example.com # required
name: example.com # optional
admins:
- {email: 'admin1@gmail.com', name: 'Admin1'} # at least one required, name is optional
- {email: 'admin2@gmail.com'}
配置
使用默认值的完整配置
fbeen_user:
user_entity: AppBundle\Entity\User
form_types:
change_password: Fbeen\UserBundle\Form\ChangePasswordType
profile: Fbeen\UserBundle\Form\ProfileType
register: Fbeen\UserBundle\Form\RegisterType
password_constraints:
minlength: 6
nummeric: 0
letters: 0
special: 0
password_on_profile_edit: false
register:
confirm_email: true
admin_approval: true
admin:
create_password: false
available_roles:
-
role: ROLE_USER
label: Normal user
-
role: ROLE_ADMIN
label: Administrator
providers: # optional
Facebook:
key: xxxxxxxxxxxxxxx
secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
scope: email
image: "bundles/fbeenuser/images/facebook.png"
Google:
key: xxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
secret: xxxxxxxxxxxxxxxxxxxxxxxx
image: "bundles/fbeenuser/images/google.png"
# more providers
emails_to_admins:
approve_new_account:
template: FbeenUserBundle:Email:approve_new_account.html.twig
register_confirmation:
enabled: false
template: FbeenUserBundle:Email:register_confirmation_admin.html.twig
emails_to_users:
confirm_your_mailaddress:
template: FbeenUserBundle:Email:confirm_your_mailaddress.html.twig
register_confirmation:
enabled: true
template: FbeenUserBundle:Email:register_confirmation_user.html.twig
new_account_details:
enabled: true
template: FbeenUserBundle:Email:new_account_details_user.html.twig
如果您想要以bootstrap样式渲染表单字段
# Twig Configuration
twig:
debug: "%kernel.debug%"
strict_variables: "%kernel.debug%"
form_themes:
- 'bootstrap_3_layout.html.twig'
- 待续