2011-03-23 8 views
7

मुझे लगता है कि मैंने (सिद्धांत) Symfony में प्रमाणीकरण के बारे में सभी पदों में सभी कोडों का प्रयास किया है 2. और मैं इसे काम नहीं कर सकता। जब मैं in_memory प्रदाता का उपयोग करता हूं तो सब ठीक काम करता है। मैं पीआर 8 का उपयोग कर रहा हूं।सिम्फनी 2 प्रमाणीकरण (सिद्धांत) के साथ प्रमाणीकरण

मेरे security.yml

security: 
    encoders: 
     Partners\FrontendBundle\Entity\User:  plaintext 
     Symfony\Component\Security\Core\User\User: plaintext 
    providers: 
     main: 
      entity: { class: FrontendBundle:User, property: username } 
     #  in_memory: 
     #   users: 
     #    sergi:  { password: boo123, roles: [ 'ROLE_USER' ] } 
    firewalls: 
     main: 
      pattern:   /.* 
      form_login:  true 
      anonymous:  true 
      logout:   true 
    access_control: 
     - { path: /docs.*, role: ROLE_USER } 
     - { path: /control.*, role: ROLE_USER } 
     - { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 

मेरे उपयोगकर्ता इकाई

<?php 
    namespace Partners\FrontendBundle\Entity; 
    use Symfony\Component\Security\Core\User\UserInterface; 
    use Partners\FrontendBundle\Repository\UserRepository; 
    /** 
    * @orm:Entity(repositoryClass="Partners\FrontendBundle\Repository 
    \UserRepository") 
    * @orm:Table(name="users") 
    */ 
    class User implements UserInterface 
    { 
     /** 
     * @orm:Id 
     * @orm:Column(type="integer") 
     * @orm:GeneratedValue(strategy="IDENTITY") 
     */ 
     protected $id; 
     /** 
     * @orm:Column(type="string", length="32", unique=true) 
     */ 
     protected $username; 
     /** 
     * @orm:Column(type="string", length="255", unique=true) 
     */ 
     protected $email; 
     /** 
     * @orm:Column(type="string", length="128") 
     */ 
     protected $password; 
     /** 
     * @orm:Column(type="string", length="128") 
     */ 
     protected $organization; 
     /** 
     * @orm:Column(type="string", length="128") 
     */ 
     protected $contact; 
     /** 
     * @orm:Column(type="string", length="16") 
     */ 
     protected $phone; 
     /** 
     * @orm:Column(type="string", length="10") 
     */ 
     protected $cid; 
     /** 
     * @orm:Column(type="smallint") 
     */ 
     protected $status; 
     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; 
     } 
     public function setEmail($email) 
     { 
      $this->email = $email; 
     } 
     public function getEmail() 
     { 
      return $this->email; 
     } 
     public function setPhone($phone) 
     { 
      $this->phone = $phone; 
     } 
     public function getPhone() 
     { 
      return $this->phone; 
     } 
     public function setContact($contact) 
     { 
      $this->contact = $contact; 
     } 
     public function getContact() 
     { 
      return $this->contact; 
     } 
     public function setOrganization($org) 
     { 
      $this->organization = $org; 
     } 
     public function getOrganization() 
     { 
      return $this->organization; 
     } 
     public function setCid($cid) 
     { 
      $this->cid = $cid; 
     } 
     public function getCid() 
     { 
      return $this->cid; 
     } 
     public function setStatus($status) 
     { 
      $this->status = $status; 
     } 
     public function getStatus() 
     { 
      return $this->status; 
     } 
     /** 
     * Implementing the UserInterface interface 
     */ 
     public function __toString() 
     { 
      return $this->getUsername(); 
     } 
     public function getRoles() 
     { 
      return array('ROLE_USER'); 
     } 
     public function eraseCredentials() 
     { 
      return false; 
     } 
     public function getSalt() 
     { 
      return $this->getId(); 
     } 
     /** 
     * equals. 
     * 
     * @param UserInterface $account 
     * @return bool 
     */ 
     public function equals(UserInterface $account) 
     { 
      if ($account->getUsername() != $this->getUsername) { 
       return false; 
      } 
      if ($account->getEmail() != $this->getEmail) { 
       return false; 
      } 
      return true; 
     } 
    } 

UserRepository

<?php 
    namespace Partners\FrontendBundle\Repository; 
    use Doctrine\ORM\EntityRepository; 
    use Symfony\Component\Security\Core\User\UserProviderInterface; 
    use Symfony\Component\Security\Core\User\UserInterface; 
    class UserRepository extends EntityRepository implements 
    UserProviderInterface 
    { 
     const CREATED = 0; 
     const ACTIVE = 10; 
     const INACTIVE = 20; 
     /** 
     * loadUserByUsername. 
     * 
     * @param string $username 
     * @return Partners\FrontendBundle\Entity\User 
     */ 
     public function loadUserByUsername($username) 
     { 
      return $this->findOneBy(array('username' => $username)); 
     } 
     function loadUser(UserInterface $user) 
     { 
      return $user; 
     } 
     function loadUserByAccount(AccountInterface $account) 
     { 
      return $this->loadUserByUsername($account->getUsername()); 
     } 
     public function supportsClass($class) 
     { 
      return true; 
     } 
    } 

जब मैं भरने लॉगिन $ त्रुटि में त्रुटि के रूप में = $ this-> get ('अनुरोध') -> getSession() -> मिल (SecurityContext :: AUTHENTICATION_ERROR); है:

exception 'Symfony\Component\Security\Core\Exception 
\BadCredentialsException' with message 'Bad credentials' in /var/www/ 
inspiring/trunk/Symfony/vendor/symfony/src/Symfony/Component/Security/ 
Core/Authentication/Provider/DaoAuthenticationProvider.php:66 Stack 
trace: #0 /var/www/inspiring/trunk/Symfony/vendor/symfony/src/Symfony/ 
Component/HttpFoundation/SessionStorage/NativeSessionStorage.php(81): 
session_start() #1 /var/www/inspiring/trunk/Symfony/app/cache/dev/ 
classes-53824.php(284): Symfony\Component\HttpFoundation\SessionStorage 
\NativeSessionStorage->start() #2 /var/www/inspiring/trunk/Symfony/app/ 
cache/dev/appDevDebugProjectContainer.php(1151): Symfony\Component 
\HttpFoundation\Session->start() #3 /var/www/inspiring/trunk/Symfony/ 
app/bootstrap.php.cache(109): appDevDebugProjectContainer- 
>getSessionService() #4 /var/www/inspiring/trunk/Symfony/app/cache/dev/ 

classes-53824.php(1553): Symfony\Component\DependencyInjection 
\Container->get('session') #5 /var/www/inspiring/trunk/Symfony/app/ 
cache/dev/classes-53824.php(1544): Symfony\Bundle\FrameworkBundle 
\RequestListener->initializeSession(Object(Symfony\Component 
\HttpFoundation\Request), true) #6 /var/www/inspiring/trunk/Symfony/ 
app/cache/dev/classes-53824.php(1214): Symfony\Bundle\FrameworkBundle 
\RequestListener->onCoreRequest(Object(Symfony\Component\HttpKernel 
\Event\GetResponseEvent)) #7 /var/www/inspiring/trunk/Symfony/vendor/ 
symfony/src/Symfony/Bundle/FrameworkBundle/Debug/ 
TraceableEventDispatcher.php(49): Symfony\Component\EventDispatcher 
\EventDispatcher->triggerListener(Object(Symfony\Bundle\FrameworkBundle 
\RequestListener), 'onCoreRequest', Object(Symfony\Component\HttpKernel 
\Event\GetResponseEvent)) #8 /var/www/inspiring/trunk/Symfony/app/ 
cache/dev/classes-53824.php(1146): Symfony\Bundle\FrameworkBundle\Debug 
\TraceableEventDispatcher->triggerListener(Object(Symfony\Bundle 
\FrameworkBundle\RequestListener), 'onCoreRequest', Object(Symfony 
\Component\HttpKernel\Event\GetResponseEvent)) #9 /var/www/inspiring/ 
trunk/Symfony/app/cache/dev/classes-53824.php(1734): Symfony\Component 
\EventDispatcher\EventDispatcher->dispatch('onCoreRequest', 
Object(Symfony\Component\HttpKernel\Event\GetResponseEvent)) #10 /var/ 
www/inspiring/trunk/Symfony/app/bootstrap.php.cache(411): Symfony 
\Bundle\FrameworkBundle\ContainerAwareEventDispatcher- 
>dispatch('onCoreRequest', Object(Symfony\Component\HttpKernel\Event 

\GetResponseEvent)) #11 /var/www/inspiring/trunk/Symfony/app/ 
bootstrap.php.cache(400): Symfony\Component\HttpKernel\HttpKernel- 
>handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #12/

var/www/inspiring/trunk/Symfony/vendor/symfony/src/Symfony/Bundle/ 
FrameworkBundle/HttpKernel.php(35): Symfony\Component\HttpKernel 
\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 
1, true) #13 /var/www/inspiring/trunk/Symfony/app/ 
bootstrap.php.cache(576): Symfony\Bundle\FrameworkBundle\HttpKernel- 
>handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) 

#14 /var/www/inspiring/trunk/Symfony/web/app_dev.php(15): Symfony 
\Component\HttpKernel\Kernel->handle(Object(Symfony\Component 
\HttpFoundation\Request)) #15 {main} 

मुझे नहीं पता कि समस्या कहां हो सकती है।

+0

आप पासवर्ड डेटाबेस में कैसे जमा हो जाती है? सादे पाठ? –

+0

हां, मैं विकास करते समय सादे पाठ में संग्रहीत हूं। अब मैं उत्पादन में हूं और उन्हें लिखित किया गया है। – Sergi

+0

साल्टिंग मेरा अगला अनुमान होगा ;-) –

उत्तर

13

अंत में किसी ने मेरी मदद की। मुद्दा यह है कि मैं पासवर्ड बनाने के लिए किसी भी नमक का उपयोग नहीं कर रहा था, और उपयोगकर्ता वर्ग के गेटसाल्ट फ़ंक्शन में मैं आईडी वापस कर रहा था।

पासवर्ड (नियंत्रक में) इस तरह उत्पन्न होता है:

$factory = $this->container->get('security.encoder_factory'); 
$encoder = $factory->getEncoder($user); 
$pwd = $encoder->encodePassword('your_random_password', $user->getSalt()); 
$user->setPassword($pwd);