我在Symfony2中使用FOSUserBundle进行身份验证.一切正常,除了"记住我".我的security.yml看起来像这样:
security:
providers:
fos_userbundle:
id: fos_user.user_manager
encoders:
'FOS\UserBundle\Model\UserInterface': sha512
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
logout: true
anonymous: true
remember_me:
key: aSecretKey
lifetime: 3600
path: /
domain: ~
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, role: ROLE_ADMIN }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
Run Code Online (Sandbox Code Playgroud)
有谁知道如何解决这个问题.
如何登录内部测试以便能够执行特定于用户的操作?
我正在尝试从夹具中创建一个新的用户管理器.我正在使用FOSUserBundle和Symfony2.
$userManager = $this->container->get('fos_user.user_manager');
//$userAdmin = $userManager->createUser();
$userAdmin = new UserAdmin();
$userAdmin->setUsername('francis');
$userAdmin->setEmail('francis@francis.com');
$userAdmin->setEnabled(true);
$userAdmin->setRoles(array('ROLE_ADMIN'));
$userManager->updateUser($userAdmin, true);
Run Code Online (Sandbox Code Playgroud)
我总是收到这个错误:
[ErrorException]
Notice: Undefined property:
INCES\ComedorBundle\DataFixtures\ORM\LoadUserAdminData::$container in
/public_html/Symfony/src/INCES/ComedorBundle/DataFixtures/ORM/LoadUserAdminData.php line 16
Run Code Online (Sandbox Code Playgroud) 在我工作的地方,我们正在设计一个webapp,其中用户可能属于多个组,并且每个组都可以访问高级未知的一组资源.此外,用户可以进入或离开组和组可以获取或失去对资源的访问权限,因此整个权限授予系统需要是动态的.
我们正在使用Symfony2和FOSUserBundle.
我们喜欢ACL系统的工作方式,但我们找不到将其应用于Group对象的方法.
有没有人用Symfony做过类似的事情?或者您对如何以其他方式实施它有任何建议吗?
当有管理员用户的后端时,有一个登录表单,同时在我们网站的公共区域为普通用户提供正常的登录表单,这很有意思.
这可能使用FOSUserBundle吗?如何以"Symfony2"的方式完成?
我有问题fosuserbundle在登录成功后将用户重定向到referer
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: fos_user_security_login
use_referer: true
check_path: fos_user_security_check
csrf_provider: form.csrf_provider
logout:
path: fos_user_security_logout
anonymous: true
access_control:
- { path: ^/%locale%/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
Run Code Online (Sandbox Code Playgroud)
和config.yml:
fos_user:
db_driver: orm # other valid values are 'mongodb', 'couchdb' and 'propel'
firewall_name: main
user_class: Acme\UserBundle\Entity\User
profile:
form:
type: Acme_user_registration
registration: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个任务管理器,我需要能够获取当前登录用户的用户ID,以便在创建任务时,用户ID也会输入到数据库中.我不能让它工作它一直告诉我,call to undefined function getUser()
我不认为我必须定义它,我认为它是内置的.
有人可以帮我解决这个问题,我将不胜感激!
这是创建任务的函数
<?php
namespace Starnes\TaskBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Starnes\TaskBundle\Entity\Task;
use Starnes\TaskBundle\Form\TaskType;
use Starnes\UserBundle\Entity\User;
/**
* Task controller.
*
* @Route("/task")
*/
class TaskController extends Controller
{
/**
* Lists all Task entities.
*
* @Route("/", name="task")
* @Method("GET")
* @Template()
*/
public function indexAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('StarnesTaskBundle:Task')->findAll();
return array(
'entities' => $entities,
);
}
/**
* Creates a new Task entity. …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个简单的CRUD来管理我正在工作的应用程序的用户/角色/组.管理我正在使用的用户FOSUserBundle
.我想做的事可以通过以下几种方式完成:
但我不知道怎么做.我知道FOSUser BaseUser
类已经有了一个列,roles
并且在FOSUser 的文档中解释了如何ManyToMany
在用户和组之间建立关系,但是没有谈论任何关于角色的内容.想到的唯一想法是创建一个实体来管理角色以及一个用于相同目的的表单,如下所示:
角色实体
use Symfony\Component\Security\Core\Role\RoleInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="fos_role")
* @ORM\Entity(repositoryClass="UserBundle\Entity\Repository\RoleRepository")
*
* @see User
* @see \UserBundle\Role\RoleHierarchy
*
*/
class Role implements RoleInterface
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id()
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=80, unique=true)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="Role", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true)
* @var Role[]
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Role", …
Run Code Online (Sandbox Code Playgroud) 当我通过常规方式验证(使用登录表单)时,它可以正常工作.我只有在/check_form
通过GET方法直接访问时才会收到此错误,在这种情况下抛出异常:
您必须使用安全防火墙配置中的form_login配置防火墙处理的检查路径.
以下是相关security.yml
部分:
firewalls:
acme_area:
pattern: ^/(acme|admin)/
provider: fos_userbundle
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: acme_login
check_path: /acme/login_check
logout:
path: /acme/logout
target: acme_login
anonymous: true
Run Code Online (Sandbox Code Playgroud)
我使用2.3,因此没有methods
适用的选项(虽然我不知道它是否会有所帮助).
这不是一个真正的问题,因为这个错误不能破坏正确的使用方法,但是当一些勤奋的机器人访问该站点时它会污染错误日志并且它只是不整洁.所以,我想知道我可以更改哪个配置选项来摆脱这个错误.
为了降低这一点,似乎我想要抛出一些4xx错误而不是500.理想情况下它应该是405 Method Not Allowed
,但404
冷却也是如此.
编辑:
正如我从下面的Alex的答案中了解到的那样,这是因为POST请求由防火墙和Controller的GET请求处理.因此,似乎checkAction()
必须扩展默认值才能处理两种情况:
我正在使用Symfony 3.4与FOSUserBundle~2.0和EasyAdminBundle ^ 1.17.一切正常.我可以登录系统并创建用户((当然有推荐行))我使用这个toutaril 但是当我想在EasyAdminBundle.i管理时有这个错误
The "User" entity must define its associated Doctrine entity class using the "class" option.
Run Code Online (Sandbox Code Playgroud)
这是我的config.yml
..
.
.
entities:
User:
label: 'user'
list:
actions:
- {name: 'delete', label: 'del' }
- {name: 'edit' , lable: 'edite'}
title: 'user'
fields:
- username
- email
- enabled
- lastLogin
class: AppBundle\Entity\User
form:
fields:
- username
- email
- enabled
- lastLogin
# if administrators are allowed to edit users' passwords and roles, add this:
- { …
Run Code Online (Sandbox Code Playgroud) fosuserbundle ×10
symfony ×10
php ×4
acl ×1
easyadmin ×1
login ×1
phpunit ×1
referer ×1
remember-me ×1
symfony-3.4 ×1
unit-testing ×1
user-roles ×1
usergroups ×1