2017-02-20 9 views
0

私はこのフレームワークでWebアプリケーションを開始しています。そして、私は最初の部分に問題がある、ログイン: 私は2つのエンティティがあります。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: 

    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 

私のsecurity.ymlファイルを設定しています。 USERSとCLIENTの2種類のユーザーがあります(chain_providerは、2種類のユーザー間でログインするのに間違いありません)。

<?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){ 

    } 
} 

私はブラウザで書く場合は、「ローカル:ファイル

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コントローラをルーティング

ユーザー私は "localhost/app/web/app_dev.php/users/login"にリダイレクトされますが、エラー302が発生し、 "リダイレクトが多すぎます"と表示されます。また、クロムコンソール(F12)を開くと、3秒ごとにlogin.phpファイルが「開く」ことが多く見られます。

enter image description here

+0

各パートを個別にテストすると、認証が機能しますか? セキュリティを追加:ファイアウォール 'frontend'にfalseを入力してログインを試みます。 また、ファイアウォールのフロントエンドにプロバイダを指定する必要があるかもしれません – Strnm

答えて

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 

私が考えるに、匿名のパラメータは、あなたの問題を解決します。

+0

ありがとう、私はドキュメントを見落としました、私は匿名を削除する必要があると思います:〜ログインを介してすべてのページにアクセスするが、ユーザーログ。私のせい。 – SensacionRC