मैं एक छोटे से Doctrine2 समर्थित पहली बार के लिए Symfony2 का उपयोग कर परियोजना पर काम कर रहा हूँ में आधारित प्रमाणीकरण तंत्र। वर्तमान में मैं documentation में वर्णित प्रमाणीकरण तंत्र के साथ सटीक होने के लिए symfony2 के सुरक्षा घटक के साथ संघर्ष कर रहा हूं।सिद्धांत Symfony2 परियोजना
मैं एक रूप-आधारित प्रमाणीकरण का उपयोग करना चाहते हैं और सब कुछ था डॉक्स में कहा गया है:
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 से बाहर रखा गया है:
मैं एक security.yml विन्यास फाइल जो इस तरह दिखता है devcomments पर समान धागे पढ़ने के बाद "सुरक्षित" क्षेत्र।
मेरी रूटिंग कॉन्फ़िगरेशन में मैं प्रमाणीकरण के लिए दो नियमों में शामिल हैं:
_security_login:
pattern: /login
defaults:
_controller: PublicBundle:Auth:index
_security_check:
pattern: /validateLogin
इकाई वर्ग मैं एक उपयोगकर्ता का प्रतिनिधित्व करने का उपयोग कर रहा एक Doctrine2 इकाई है और AccountInterface लागू करता है:
<?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();
}
}
में क्लास ऑथकंट्रोलर मैं symfony2 दस्तावेज़ों से उदाहरण कोड का उपयोग कर रहा हूं:
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));
}
अब समस्या आता है: http://symfony2.localhost/app_dev.php/admin/testhttp://symfony2.localhost/app_dev.php/login के कार्यों से पुनर्निर्देशन नियम लेकिन उपयोगकर्ता नाम/पासवर्ड में प्रवेश करने और प्रवेश फार्म जमा करने के बाद, मैंने एक त्रुटि संदेश के बिना फिर से प्रवेश URL पर रीडायरेक्ट किया जा रहा हूँ।
मुझे पता है कि यह शायद एक बहुत बुनियादी मुद्दा है लेकिन बाद से वहाँ अभी तक symfony2 पर ज्यादा प्रलेखन नहीं है, मुझे लगता है कि यह इस तरह सवाल पूछने के लिए एक अच्छी जगह है। सामान्य रूप से एक सिम्फनी 2 प्रोजेक्ट के अंदर कुछ बिंदु हैं जो जादुई रूप से काम कर रहे हैं (निश्चित रूप से डी-बैकड) जो सीखने की प्रक्रिया को थोड़ा कठिन बनाते हैं। कैसे काम करता है प्रमाणीकरण पर मेरे विचार, कुछ जादुई नियंत्रक जो validateLogin कार्रवाई फैल जाती है कि वहाँ है मेरी उपयोगकर्ता इकाई के लिए एक इकाई के भंडार के लिए लग रहा है, findOneBy ('उपयोगकर्ता नाम' => $ उपयोगकर्ता नाम) कॉल और पासवर्ड तुलना ... यह है सही?
किसी भी संकेत के लिए अग्रिम धन्यवाद, अब मैं अधिक कुछ घंटों के लिए इस मुद्दे को googling किया गया है ... :)
पॉल
वाह, उत्तर के लिए धन्यवाद! मैं इसे बाद में सम्मान करने की कोशिश करूंगा! – Paul