symfony2 を使用して構築された Web アプリに認証システムを実装する必要があります。ログインとログアウトの操作は適切に機能しますが、無効なユーザーのログインを回避することはできません。
これは私のsecurity.ymlです:
security:
encoders:
Acme\MyBundle\Entity\User:
algorithm: sha512
encode-as-base64: true
iterations: 10
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_DOCTOR]
providers:
user_db:
entity: { class: Acme\MyBundle\Entity\User, property: username }
firewalls:
main:
pattern: /.*
provider: user_db
form_login:
login_path: /login
check_path: /login_check
remember_me: true
logout:
path: /logout
target: /
remember_me:
key: MiPassphrase
lifetime: 1800
path: /.*
domain: ~
security: true
anonymous: true
access_control:
- { path: /info, roles: ROLE_ADMIN }
- { path: /login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /.*, roles: IS_AUTHENTICATED_FULLY }
これは私の Entity/User.php ファイルです:
<?php
namespace Acme\MyBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
/**
* @ORM\Entity
* @ORM\Table(name="Users")
*/
class User implements UserInterface
{
// Definizione campi
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string", unique=true)
*/
protected $username;
/**
* @ORM\Column(type="string")
*/
protected $password;
/**
* @ORM\Column(type="string")
*/
protected $salt;
/**
* @ORM\Column(type="integer", nullable=true)
*/
protected $idRole;
/**
* @ORM\Column(type="integer", nullable=true)
*/
protected $idAnagrafica;
/**
* @ORM\Column(type="integer", nullable=true)
*/
protected $idTipoVisita;
/**
* @ORM\Column(type="boolean", nullable=true)
*/
protected $attivo;
// Definizioni delle funzioni Get
/**
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getUsername()
{
return $this->username;
}
/**
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* @return string
*/
public function getSalt()
{
if (null === $this->salt) {
$this->salt = sha512(sprintf(
'%s_%d_%f',
uniqid(),
rand(0, 99999),
microtime(true)
));
}
return $this->salt;
}
/**
* @return array
*/
public function getRoles()
{
return array('ROLE_ADMIN', 'ROLE_USER', 'ROLE_DOCTOR' );
}
/**
* @return integer
*/
public function getIdRole()
{
return $this->idRole;
}
/**
* @return integer
*/
public function getIdAnagrafica()
{
return $this->idAnagrafica;
}
/**
* @return integer
*/
public function getIdTipoVisita()
{
return $this->idTipoVisita;
}
/**
* @return boolean
*/
public function getAttivo()
{
return $this->attivo;
}
// Definizione delle funzioni Set
/**
* @return void
*/
public function eraseCredentials()
{
$this->roles = null;
}
/**
* Set username
*
* @param string $username
* @return User
*/
public function setUsername($username)
{
$this->username = $username;
return $this;
}
/**
* Set password
*
* @param string $password
* @return User
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Set salt
*
* @param string $salt
* @return User
*/
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
/**
* Set idAnagrafica
*
* @param integer $idAnagrafica
* @return User
*/
public function setIdAnagrafica($idAnagrafica)
{
$this->idAnagrafica = $idAnagrafica;
return $this;
}
/**
* Set riferimento idTipoVisita
*
* @param integer $idTipoVisita
* @return User
*/
public function setIdTipoVisita($idTipoVisita)
{
$this->idTipoVisita = $idTipoVisita;
return $this;
}
/**
* Set attivo
*
* @param bolean $attivo
* @return User
*/
public function setAttivo($attivo)
{
$this->attivo = $attivo;
return $this;
}
/**
* Set idRole
*
* @param bolean $idRole
* @return User
*/
public function setIdRole($idRole)
{
$this->idRole = $idRole;
return $this;
}
// Funzioni advance user interface
public function isAccountNonExpired()
{
return true;
}
public function isAccountNonLocked()
{
return true;
}
public function isCredentialsNonExpired()
{
return true;
}
public function isEnabled()
{
return $this->attivo;
}
}
「attivo」フィールドは、「isActive」の代わりに使用するブール フィールドです。ドキュメント ( http://symfony.com/doc/current/cookbook/security/entity_provider.html ) のために、私はそれを機能させるために必要なすべてのパッセージを実行しました。とにかく、「attivo」フィールドが 0 に設定されているユーザーはログインを実行できます。
なにが問題ですか?私が逃したものは何ですか?ありがとう。