У меня есть администрация, но я не могу войти в систему. Выдает ошибку неверных учетных данных. Проект связан с БД, потому что я генерировал таблицы из сущностей, и он работает хорошо. Я думаю, что проблема в ролях пользователей, но я не уверен.
Спасибо за совет.
security.yml
security:
encoders:
administrators:
class: Nasivin\AdminBundle\Entity\Admin
algorithm: plaintext
role_hierarchy:
ROLE_USER: ROLE_USER
ROLE_ADMIN: ROLE_ADMIN
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
administrators:
entity: { class: NasivinAdminBundle:Admin, property: username }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin:
pattern: ^/admin/
provider: administrators
anonymous: ~
form_login:
check_path: _admin_security_check
login_path: _admin_login
default_target_path: /admin/bla
always_use_default_target_path: true
logout:
path: _admin_logout
target: /admin
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
admin_login:
path: ^/admin/login
roles: IS_AUTHENTICATED_ANONYMOUSLY
admin_area:
path: ^/admin/.*
roles: ROLE_USER
Класс сущности admin.php
<?php
/**
* Created by PhpStorm.
* User: Michal
* Date: 16.9.2014
* Time: 11:37
*/
namespace Nasivin\AdminBundle\Entity;use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
/**
* Nasivin\AdminBundle\Entity\Admin
*
* @ORM\Table(name="tb_admin")
* @ORM\Entity()
*/
class Admin implements UserInterface
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(name="username", type="string", length=25, unique=true)
*/
protected $username;
/**
* @ORM\Column(name="password", type="string", length=64)
*/
protected $password;
/**
* @ORM\Column(name="salt", type="string", length=64)
*/
protected $salt;
/**
* @inheritDoc
*/
public function getUsername()
{
return $this->username;
}
/**
* @inheritDoc
*/
public function getSalt()
{
// you *may* need a real salt depending on your encoder
// see section on salt below
return null;
}
/**
* @inheritDoc
*/
public function getPassword()
{
return $this->password;
}
/**
* @inheritDoc
*/
public function eraseCredentials()
{
}
/**
* @inheritDoc
*/
public function getRoles()
{
return array("ROLE_ADMIN", "ROLE_USER");
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set username
*
* @param string $username
* @return Admin
*/
public function setUsername($username)
{
$this->username = $username;
return $this;
}
/**
* Set password
*
* @param string $password
* @return Admin
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Set salt
*
* @param string $salt
* @return Admin
*/
public function setSalt($salt)
{
$this->salt = $salt;
return $this;
}
}
login.html.twig
{% extends "::base.html.twig" %}
{% block title %}NasivinAdminBundle:Security:login{% endblock %}
{% block body %}
<h1>Welcome to the Security:login page</h1>
<form action="{{ path('_admin_security_check') }}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
{#
If you want to control the URL the user
is redirected to on success (more details below)
<input type="hidden" name="_target_path" value="/account" />
#}
<button type="submit">login</button>
</form>
{% endblock %}
Во-первых, формы на Symfony должны быть объектами.
Symfony интегрирует компонент Form, который упрощает работу с формами.
Что касается логина пользователя, советую использовать fosuserbundle
Проблема заключалась в том, что я создал пользователя в базе данных. Как только я создал функцию регистрации администратора и зарегистрировал ее, она работала.