我正在使用此框架启动Web应用程序。我的第一部分,登录有问题: 我有两个实体:
用户
<?php
namespace app\UsuariosBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
/**
* Users
*
* @ORM\Table()
* @ORM\Entity
*/
class Users implements UserInterface
{
//some properties and getters and setters
public function getPassword()
{
return $this->password;
}
function eraseCredentials()
{
}
function getRoles(){
return array('ROLE_USUARIO');
}
function getUsername(){
return $this->getEmail();
}
function getSalt(){
return 'my_salt';
}
}
客户
<?php
namespace app\ClientesBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
/**
* Clients
*
* @ORM\Table()
* @ORM\Entity
*/
class Clients implements UserInterface
{
//some properties and getters and setters
public function getPassword()
{
return $this->password;
}
function eraseCredentials()
{
}
function getRoles(){
return array('ROLE_USUARIO');
}
function getUsername(){
return $this->getEmail();
}
function getSalt(){
return 'my_salt';
}
}
我添加了这些最后的方法,因为在文档中它说我们需要。
现在我已经配置了security.yml文件
security:
encoders:
app\UsersBundle\Entity\Users: { algorithm: sha512 }
app\Clients\Entity\Clients: { algorithm: sha512 }
access_control:
- { path: ^/users/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/users/registro, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/users/*, roles: ROLE_USUARIO }
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN,ROLE_USUARIO]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
chain_provider:
chain:
providers: [users, clients]
users:
entity: { class: app\UsersBundle\Entity\Users, property: email }
clients:
entity: { class: app\ClientsBundle\Entity\Clients, property: email }
firewalls:
frontend:
pattern: ^/*
provider: chain_provider
form_login:
login_path: users_login
check_path: users_login_check
logout:
path: users_logout
我不知道在这一点上我是否正确。有两种用户:USERS和CLIENTS(chain_provider在两种用户之间进行登录是否正确?)。
用户路由文件
users_login:
pattern: /login
defaults: { _controller: UsersBundle:Default:login }
users_login_check:
pattern: /login_check
users_logout:
pattern: /logout
配置路由文件
users:
resource: "@UsersBundle/Resources/config/routing.yml"
prefix: /users
home:
path: /users/login
defaults: { _controller:UsersBundle:Default:home}
_home:
path: /
defaults: { _controller FrameworkBundle:Redirect:redirect, route: home }
最后是UsersBundle控制器:
<?php
namespace app\UsersBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\SecurityContext;
class DefaultController extends Controller
{
public function homeAction(){
return $this->render('UsuariosBundle:Default:login.html.twig');
}
public function loginAction(Request $peticion){
}
}
如果我在浏览器中写入“localhost / app / web / app_dev.php”,它会将我重定向到“localhost / app / web / app_dev.php / users / login”,但我收到错误302,并说“太多的重定向“。如果我打开chrome控制台(F12),我会看到很多login.php文件每3秒“打开”一次。
答案 0 :(得分:1)
您似乎忘记了anonymous ~
参数。
改变你的代码:
frontend:
pattern: ^/*
provider: chain_provider
form_login:
login_path: users_login
check_path: users_login_check
logout:
path: users_logout
就像那样:
frontend:
anonymous: ~
pattern: ^/
provider: chain_provider
form_login:
login_path: users_login
check_path: users_login_check
logout:
path: users_logout
我认为,匿名参数可以解决您的问题。