我已經遵循official documentation關於使用symfony 2標準分發提供的安全性對我的用戶進行身份驗證,通過Doctrine2將它們保存在數據庫中,並且它似乎是關於配置的一切正常,但我總是得到相同的錯誤:Bad Credentials
。Symfony 2安全總是返回Bad憑證錯誤
我已經使用DoctrineFixturesBundle加載一些用戶和角色,並且它似乎完成加載好了。所以,我認爲這個問題是在認證過程中的某個地方,這對我來說是透明的......我不知道如何調試,並希望有任何幫助...
謝謝!如果您需要任何其他代碼片段,請讓我知道,我將編輯該問題。我不是在這裏粘貼代碼,以使問題更具可讀性....
編輯2:由於@Dieter建議,我查了日誌,似乎沒有數據傳遞給查詢,這是非常奇怪的,因爲我遵循他們在the cookbook中提到的每一個約定...這也是我的登錄表單的定義。很抱歉,很長的問題!任何幫助將不勝感激! LoginType.php的
片段:
public function buildForm(FormBuilder $builder, array $options) {
$builder->add('_username', 'text', array(
'label' => 'Email ',
'required' => true,
));
$builder->add('_password', 'password', array(
'label' => 'Password ',
'required' => true,
));
$builder->add('_remember_me', 'checkbox', array(
'label' => 'Remember me ',
'required' => false,
));
}
應用/日誌/ dev.log輸出:
[2012-04-17 03:43:01] event.DEBUG: Notified event "kernel.request" to listener
"Symfony\Component\Security\Http\Firewall::onKernelRequest".
[] []
[2012-04-17 03:43:01] doctrine.DEBUG: SET NAMES UTF8 ([]) [] []
[2012-04-17 03:43:01] doctrine.DEBUG: SELECT t0.id AS id1, t0.username AS
username2, t0.salt AS salt3, t0.password AS password4,
t0.is_active AS is_active5, t0.mailer_id AS mailer_id6
FROM SfUser t0 WHERE t0.username = ? (["NONE_PROVIDED"])
[] []
[2012-04-17 03:43:01] security.INFO: Authentication request failed: Bad
credentials [] []
[2012-04-17 03:43:01] security.DEBUG: Redirecting to/[] []
編輯: 由於我的引擎收錄鏈接失效,並且,由彼得的建議Porfey,這是代碼:
這是我的security.yml
security:
encoders:
ElCuadre\AccountBundle\Entity\User: sha512
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_PROVIDER]
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_PROVIDER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
user_db:
entity: { class: ElCuadre\AccountBundle\Entity\User, property: username}
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path:/
check_path: /login_check
logout:
path: /logout
target:/
remember_me:
key: %secret%
lifetime: 3600
path: /
domain: ~ # Defaults to the current domain from $_SERVER
access_control:
- { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
和我的控制器:
public function loginAction() {
$request = $this->getRequest();
$session = $request->getSession();
// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
$form = $this->createForm(new LoginType());
return $this->render(
'ElCuadreAccountBundle:Auth:login.html.twig',
array(
'form' => $form->createView(),
'last_username' => $session->get(
SecurityContext::LAST_USERNAME),
'error' => $error,
)
);
}
這裏是夾具文件的代碼:
<?php
namespace ElCuadre\AccountBundle\DataFixtures\ORM;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\DataFixtures\AbstractFixture;
use ElCuadre\AccountBundle\Entity\User;
use ElCuadre\AccountBundle\Entity\Role;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class LoadAccountData extends AbstractFixture implements FixtureInterface, ContainerAwareInterface {
private $container;
public function setContainer(ContainerInterface $container = null) {
$this->container = $container;
}
private function loadRole($manager, $name, $roleName) {
$role = new Role();
$role->setName($name);
$role->setRole($roleName);
$manager->persist($role);
$manager->flush();
return $role;
}
private function loadUser($manager, $username, $password, $roles) {
$user = new User();
$user->setUsername($username);
$encoder = $this->container->get('security.encoder_factory')->getEncoder($user);
$user->setPassword($encoder->encodePassword($password, $user->getSalt()));
foreach ($roles as $role) {
$user->addRole($role);
}
$manager->persist($user);
$manager->flush();
}
public function load(ObjectManager $manager) {
// Roles:
$roleUser = $this->loadRole($manager, 'user', 'ROLE_USER');
$roleProvider = $this->loadRole($manager, 'provider', 'ROLE_PROVIDER');
$roleAdmin = $this->loadRole($manager, 'admin', 'ROLE_ADMIN');
$roleSuperAdmin = $this->loadRole($manager, 'superadmin', 'ROLE_SUPER_ADMIN');
// Users:
$this->loadUser($manager, '[email protected]', 'userpass', $roleUser);
$this->loadUser($manager, '[email protected]', 'providerpass', $roleProvider);
$this->loadUser($manager, '[email protected]', 'adminpass', $roleAdmin);
$this->loadUser($manager, '[email protected]', 'superadminpass', $roleSuperAdmin);
}
}
你應該在這裏添加代碼。 btw的pastebin鏈接被打破(可能已過期) – 2012-04-13 07:40:47
對不起!你是對的,有代碼,我希望你能幫助我!謝謝! – Throoze 2012-04-13 08:23:02