Symfony2'nin projede Doktrin merkezli bir kimlik doğrulama mekanizması

0 Cevap php

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

0 Cevap