symfony 2, nicht vollständig authentifiziert werden nach dem login
Meine Sicherheit.yml wie folgt:
jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
Taden\MainBundle\Entity\Employee:
algorithm: sha512
iterations: 2
encode_as_base64: true
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
main:
entity: { class: Taden\MainBundle\Entity\Employee, property: code }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/login$
anonymous: ~
secured_area:
pattern: ^/
form_login: ~
logout:
path: /logout
target: /login
http_basic: ~
anonymous: ~
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/, roles: ROLE_USER }
Meine loginAction() ist wie folgt:
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);
}
if ($error != null)
{
$error_message = $this->get('translator')->trans($error->getMessage());
$this->get('session')->getFlashBag()->add('error', $error_message);
}
if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY'))
{
return $this->redirect($this->generateUrl('menu'));
}
else
{
$this->get('session')->getFlashBag()->add('error', 'not logged in');
}
return $this->render('TadenMainBundle:Default:login.html.twig', array(
'company_name' => '',
'department_name' => '',
'user_name' => '',
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
));
}
Auf dem localhost funktioniert es ohne problem. Auf Produktions-server-login-Seite wird wieder angezeigt
nachdem Sie die richtigen Anmeldeinformationen. Ich habe das Datenbank-Verbindung funktioniert ohne problem. Das problem ist isGranted('IS_AUTHENTICATED_FULLY') false zurück.
Es hilft nicht, wenn ich
<input type="hidden" name="_target_path" value="/menu" />
in der Anmeldung.html-Code.Zweig. Kann mir jemand zeigen in die richtige Richtung um das problem zu lösen?
- wenn die dev-version arbeiten und prod nicht, möchte ich mich auf db-Probleme.
- Es funktioniert wie erwartet, wenn ich Zugriff auf die db-code in der loginAction (), und setzen Sie flash-Mitteilungen; also ich bin mir ziemlich sicher, dass es kein db-Problem.
- synergetischen: ich meine, ist die gleiche db? ist diese db noch aufgefüllt mit Ihrem original-Aufzeichnungen? Ich habe nie gehört, über die Frage, wie dies
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Symfony 2, Sie sind vollständig authentifiziert werden, wenn Ihre Benutzer eine zugeordnete Rolle zu sich selbst (mindestens eine).
Versuchen, das hinzufügen einer Rolle auf Ihre Benutzer, und Sie sollten sehen, in der debug-bar, dass Sie vollständig authentifiziert werden mit der Rolle, die Sie gab, um Ihre Benutzer (und dann die "IS_AUTHENTICATED_FULLY" sollte wahr sein).
Klasse Taden\MainBundle\Entity\Mitarbeiter müssen implementiert EquatableInterface
Die Methode sollte so etwas wie dieses
return get_class($this) === get_class($admin) && $this->id === $admin->getId()