Chcę zrobić logowanie, takie jak w "acme demo", czyli z ustalonymi w konfiguracji adminami.
Niby cały kod mam i wszystko działa... ale jak chcę przenieść to na moje potrzeby, to mi nie wychodzi.
Napiszę co po kolei robiłem :
1. Do swojego kontrolera dodałem 3 metody :
/**
* @Route("valuation/admin/login", name="admin_login")
* @Template()
*/
public function loginAction()
{
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);
}
'last_username' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
'error' => $error,
);
}
/**
* @Route("valuation/admin/login_check", name="_security_check")
*/
public function securityCheckAction()
{
// The security layer will intercept this request
}
/**
* @Route("valuation/admin/logout", name="_demo_logout")
*/
public function logoutAction()
{
// The security layer will intercept this request
}
oraz taką linijkę na początek :
use JMS\SecurityExtraBundle\Annotation\Secure;
Są one skopiowane z przykładu Acme
2.Skopiowałem templatke login.html.twig do swojego bundla
3. Nieco zmodyfikowałem plik security.yml
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^valuation/admin/login$
security: false
secured_area:
pattern: ^/valuation/admin/
form_login:
check_path: valuation/admin/login_check
login_path: valuation/admin/login
logout:
path: valuation/admin/logout
target: valuation/
#anonymous: ~
#http_basic:
# realm: "Secured Demo Area"
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
#- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
I to by było na tyle.
Wchodzę sobie do
Kod
valuation/admin/login
Formularz się wyświetla. Wpisuje dane, wysyłam i przenosi mnie do
Kod
valuation/admin/login_check
gdzie wyświetla się :
Kod
he controller must return a response (null given). Did you forget to add a return statement somewhere in your controller?
500 Internal Server Error - LogicException
Błąd jest zrozumiały, bo mój kontroler faktycznie nie zwraca wartości... ale podobno jakiś "security layer" ma to "obejść" i mimo to mnie zalogować.
Czy mogę prosić o podpowiedź gdzie znajduje się błąd ?