Witam,
Panowie przy stworzeniu formularza logowania w moim projekcie przy użyciu SecurityContextInterface.
Dane ładowane do bazy przy użyciu DataFixtures przy użyciu arrayki więc co leci do bazy wiem.
Mam następujący problem:
Przy wpisaniu poprawnych danych logowania na przykładowego usera za każdym jednym razem dostaje zwrotkę "Bad Credentials" oraz do widoku nie wskakuje ostatnio logowany user
Proszę o jakąś wskazówkę.
security.yml
security:
encoders:
Common\UserBundle\Entity\User:
algorithm: bcrypt
role_hierarchy:
ROLE_EDITOR: ROLE_USER
ROLE_ADMIN: [ROLE_EDITOR, ROLE_USER]
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_EDITOR, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
blog_users:
entity:
class: CommonUserBundle:User
property: username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
blog_security:
pattern: ^/
anonymous: ~
form_login:
check_path: _check_path
login_path: blog_login
default_target_path: blog_index
username_parameter: login[username]
password_parameter: login[password
logout:
path: _logout
target: blog_index
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
- { path: ^/account-settings, roles: ROLE_USER }
- { path: ^/admin-panel, roles: ROLE_EDITOR }
UserFixtures
<?php
namespace Common\UserBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Common\UserBundle\Entity\User;
class UserFixtures extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
/**
* @var ContainerInterface
*/
private $container;
public function setContainer(ContainerInterface $container = null)
{
$this->container = $container;
}
public function getOrder() {
return 0;
}
public function load(ObjectManager $manager) {
$usersList = array(
array(
'nick' => 'adas_no',
'email' => 'anowak@test.pl',
'password' => '123',
'role' => 'ROLE_USER'
),
array(
'nick' => 'kowal',
'email' => 'j.kowalski@test.pl',
'password' => '123',
'role' => 'ROLE_EDITOR'
),
array(
'nick' => 'anowak',
'email' => 'anowakik@test.pl',
'password' => '123',
'role' => 'ROLE_ADMIN'
),
array(
'nick' => 'szymon',
'email' => 'szymon@test.pl',
'password' => '123',
'role' => 'ROLE_SUPER_ADMIN'
),
array(
'nick' => 'adas',
'email' => 'nowy@test.pl',
'password' => '123',
'role' => 'ROLE_USER'
),
);
$encoderFactory = $this->container->get('security.encoder_factory');
foreach($usersList as $userDetalis){
$User = new User();
$password = $encoderFactory->getEncoder($User)->encodePassword($userDetalis['password'], null);
$User->setUsername($userDetalis['nick'])
->setEmail($userDetalis['email'])
->setPassword($password)
->setRoles(array($userDetalis['role']))
->setEnabled(true);
$manager->persist($User);
}
$manager->flush();
}
}
routing.yml dla bundla USER
common_user:
resource: "@CommonUserBundle/Controller/"
type: annotation
prefix: /
_check_path:
path: /login-check
_logout:
path: /logout
Widok form
{% if loginError is defined and loginError is not null %}
<div class="notification blog">{{ loginError.message }}</div>
{% endif %}
<div class="login-register two-cols">
<div class="col col-bdr">
<h2 class="strong">Logowanie</h2>
<form class="login-form" action="{{ path('_check_path') }}" method="post">
<div class="form-row">
<label for="login" class="required">Login</label>
<input id="login" type="text" name="_username" value="{{ userName }}">
</div>
<div class="form-row">
<label for="passwd" class="required">Hasło</label>
<input id="passwd" type="text" name="_password">
</div>
<label class="checkbox remember">
<input type="checkbox"> Zapamiętaj mnie
</label>
<button class="btn-green submit">Zaloguj</button>
</form>
<div class="remember-pass-form">
<h2 class="strong">Przypomnij hasło</h2>
loginController
<?php
namespace Common\UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\HttpFoundation\Request;
class LoginController extends Controller
{
/**
* @Route(
* "/login",
* name="blog_login"
* )
* @Template()
*/
public function loginAction(Request $request)
{
$Session = $request->getSession();
if($request->attributes->has(SecurityContextInterface::AUTHENTICATION_ERROR)){
$loginError = $request->attributes->get(SecurityContextInterface::AUTHENTICATION_ERROR);
}else{
$loginError = $Session->remove(SecurityContextInterface::AUTHENTICATION_ERROR);
}
$userName = $Session->get(SecurityContextInterface::LAST_USERNAME);
return array(
'userName' => $userName,
'loginError' => $loginError
);
}
}