Ben ilk defa Symfony2'ye kullanarak küçük bir Doctrine2 destekli proje üzerinde çalışıyorum. Şu anda documentation açıklanan kimlik doğrulama mekanizması ile tam olarak, Symfony2'nin güvenlik bileşeni ile mücadele ediyorum.
Ben bir form tabanlı kimlik doğrulaması kullanmak istiyorsanız ve her şey dokümanlar ifade etmedi:
Şöyle bir security.yml yapılandırma dosyası vardır:
security.config:
firewalls:
admin:
pattern: /admin/.*
form-login: true
logout: true
login_path: /login
check_path: /validateLogin
always_use_default_target_path: false
target_path_parameter: target
check_page:
pattern: /validateLogin
form-login: true
login_path: /login
check_path: /validateLogin
always_use_default_target_path: false
target_path_parameter: target
public:
pattern: /.*
security: false
providers:
admin:
password_encoder: md5
entity:
class: AdminBundle:User
property: username
access_control:
- { path: /admin/.*, role: ROLE_ADMIN }
- { path: /validateLogin, role: IS_AUTHENTICATED_ANONYMOUSLY }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
Check_page devcomments benzer bir konu okuduktan sonra "secureless" alanı dışındadır.
Benim yönlendirme yapılandırması ben kimlik doğrulama için iki kural şunlardır:
_security_login:
pattern: /login
defaults:
_controller: PublicBundle:Auth:index
_security_check:
pattern: /validateLogin
Ben bir kullanıcı temsil etmek için kullanıyorum varlık sınıfı bir Doctrine2 varlıktır ve AccountInterface uygular:
<?php
namespace Application\AdminBundle\Entity;
use Symfony\Component\Security\User\AccountInterface;
/**
* @orm:Entity
*/
class User implements AccountInterface
{
/**
* @orm:Id
* @orm:Column(type="integer")
* @orm:GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @orm:Column(type="string", length="255")
*/
protected $username;
/**
* @orm:Column(type="string", length="40")
*/
protected $password;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function getUsername()
{
return $this->username;
}
public function setUsername($username)
{
$this->username = $username;
}
public function getPassword()
{
return $this->password;
}
public function setPassword($password)
{
$this->password = $password;
}
/**
* Implementing the AccountInterface interface
*/
public function __toString()
{
return $this->getUsername();
}
public function getRoles()
{
return array('ROLE_ADMIN');
}
public function eraseCredentials()
{
}
public function getSalt()
{
return $this->getId();
}
}
Sınıf AuthController ben Symfony2 belgelerden örnek kod kullanıyorum:
public function indexAction()
{
if ($this->get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
}
return
$this->render(
'PublicBundle:Auth:index.twig',
array(
'last_username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
'error' => $error));
}
Şimdi sorun geliyor: http://symfony2.localhost/app_dev.php/login eserleri http://symfony2.localhost/app_dev.php/admin/test gelen yönlendirme kuralı ama kullanıcı adı / şifre girme ve giriş formu gönderdikten sonra, ben bir hata iletisi olmadan tekrar giriş url yönlendiriliyorsunuz am .
I know that this is probably a really basic issue but since there is not yet much documentation on symfony2, I think this is a good place to ask questions like this one. In general there are some points inside a symfony2 project which seem to be working magically (of course DI-backed) which make the learning process a bit hard. My thoughts on how the authentication works is that there is some magical Controller which catches the validateLogin action, looks for an entity repository for my User entity, calls findOneBy('username' => $username) and compares the passwords... is this right?
Şimdiden teşekkür ederim herhangi bir ipucu için, ben ... şimdi daha birkaç saat boyunca bu sorunu googling edilmiştir :)
Paul