我開始使用此框架的Web應用程序。我有與第一部分的問題,登錄: 我有兩個實體:Symfony安全防火牆
USERS
<?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';
}
}
CLIENTS
<?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
我不知道,如果在這一點上I'm權利。有兩種用戶: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){
}
}
如果我在瀏覽器中寫「本地host/app/web/app_dev.php「,它會將我重定向到」localhost/app/web/app_dev.php/users/login「,但出現302錯誤,並顯示」太多重定向「。如果我打開Chrome控制檯(F12),我會每3秒鐘看到很多login.php文件「打開」。
獨立測試每個部分,是否認證工作? 添加安全性:將虛假添加到防火牆的「前端」並嘗試登錄。 另外,您可能需要指定防火牆'前端'的提供商 – Strnm