Symfony2 FOSUserBundle pas de réglage de l'utilisateur authentifié à la session?
J'ai un très de base de Symfony2.1 le programme d'installation avec FOSUserBundle installé.
Lors de l'inscription tout est bien et je suis redirigé vers mon chemin de la cible et de la debug bar prouve que je suis authentifié comme moi-même.
Lors de la connexion toutefois, la soumission de la forme avec de mauvaises creds reflètent en tant que tel, mais si je me connecte avec le bon creds, j'ai redirigé vers mon chemin de la cible, mais je suis toujours anon, si l'authentification est réussie, mais pas persisté dans la session.
Suis-je raté quelque chose? J'ai suivi la configuration de base, à peu près exactement avec peu de personnalisation. Savez pas comment aller sur le débogage de cette (expérience avec Symfony1, les nouvelles de Symfony2).
FOSUserBundle est InteractiveLoginListener onSecurityInteractiveLogin a et correctement mises à jour de l'utilisateur avec la dernière date d'ouverture de session, je ne suis pas sûr à quel point ce serait lié à la sécurité.contexte si ni où chercher.
Dois-je enregistrer mon propre écouteur ou quelque chose ne fonctionne pas? La recherche de l'ensemble de la sécurité.le contexte semble conduire à cela ne soit fixé pour l'enregistrement et la réinitialisation?
de sécurité.yml
security:
acl:
connection: default
providers:
fos_userbundle:
id: fos_user.user_manager
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
# SONATA:
# - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented
firewalls:
# -> custom firewall for the admin area of the URL
admin:
switch_user: true
context: user
pattern: /admin(.*)
form_login:
provider: fos_userbundle
login_path: /admin/login
use_forward: false
check_path: /admin/login_check
# login success redirecting options (read further below)
always_use_default_target_path: false
default_target_path: /admin/dashboard
target_path_parameter: _target_path
use_referer: false
failure_path: null
use_referer: true
logout:
path: /admin/logout
target: /admin/login
anonymous: true
# -> end custom configuration
# default login area for standard users
main:
switch_user: true
context: user
pattern: .*
form_login:
provider: fos_userbundle
# the user is redirected here when he/she needs to login
login_path: /login
# if true, forward the user to the login form instead of redirecting
use_forward: false
# submit the login form here
check_path: /login_check
# login success redirecting options (read further below)
always_use_default_target_path: false
default_target_path: /
target_path_parameter: _target_path
use_referer: false
# login failure redirecting options (read further below)
failure_path: null
failure_forward: false
# csrf token options
csrf_parameter: _csrf_token
intention: authenticate
logout: true
anonymous: true
# -> end default configuration
access_control:
# URL of FOSUserBundle which need to be available to anonymous users
- { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
# -> custom access control for the admin area of the URL
- { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/login-check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
# -> end
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
# Secured part of the site
# This config requires being logged for the whole site and having the admin role for the admin part.
# Change these rules to adapt them to your needs
- { path: ^/admin, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] }
- { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
jms_security_extra:
secure_all_services: false
expressions: true
Journaux
[2012-07-05 15:12:50] security.INFO: User "steve" has been authenticated successfully [] []
[2012-07-05 15:12:50] event.DEBUG: Notified event "security.interactive_login" to listener "FOS\UserBundle\Security\InteractiveLoginListener::onSecurityInteractiveLogin". [] []
[2012-07-05 15:12:50] doctrine.DEBUG: UPDATE fos_user_user SET last_login = ?, updated_at = ? WHERE id = ? ([{"date":"2012-07-05 16:12:50","timezone_type":3,"timezone":"Europe\/London"},{"date":"2012-07-05 16:12:50","timezone_type":3,"timezone":"Europe\/London"},1]) [] []
[2012-07-05 15:12:50] event.DEBUG: Listener "Symfony\Component\Security\Http\Firewall::onKernelRequest" stopped propagation of the event "kernel.request". [] []
[2012-07-05 15:12:50] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\Security\Http\Firewall\ContextListener::onKernelResponse". [] []
[2012-07-05 15:12:50] security.DEBUG: Write SecurityContext in the session [] []
[2012-07-05 15:12:50] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bridge\Monolog\Handler\FirePHPHandler::onKernelResponse". [] []
[2012-07-05 15:12:50] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\SecurityBundle\EventListener\ResponseListener::onKernelResponse". [] []
[2012-07-05 15:12:50] event.DEBUG: Notified event "kernel.response" to listener "Sensio\Bundle\FrameworkExtraBundle\EventListener\CacheListener::onKernelResponse". [] []
[2012-07-05 15:12:50] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse". [] []
[2012-07-05 15:12:50] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse". [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse". [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.response" to listener "Symfony\Component\HttpKernel\EventListener\StreamedResponseListener::onKernelResponse". [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.terminate" to listener "Symfony\Bundle\SwiftmailerBundle\EventListener\EmailSenderListener::onKernelTerminate". [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest". [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest". [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\RouterListener::onKernelRequest". [] []
[2012-07-05 15:12:51] request.INFO: Matched route "sonata_admin_dashboard" (parameters: "_controller": "Sonata\AdminBundle\Controller\CoreController::dashboardAction", "_route": "sonata_admin_dashboard") [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\LocaleListener::onKernelRequest". [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest". [] []
[2012-07-05 15:12:51] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2012-07-05 15:12:51] event.DEBUG: Notified event "kernel.exception" to listener "Symfony\Component\Security\Http\Firewall\ExceptionListener::onKernelException". [] []
[2012-07-05 15:12:51] security.DEBUG: Access is denied (user is not fully authenticated) by "/var/www/motoratings/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php" at line 70; redirecting to authentication entry point [] []
[2012-07-05 15:12:51] security.DEBUG: Calling Authentication entry point [] []
Vous devez vous connecter pour publier un commentaire.
Il s'avère que la réponse était tout simplement pour effacer les cookies de mon navigateur, pour une raison quelconque, j'ai eu 2 PHPSESSID cookies.. aucune idée de comment c'est encore possible?
Mon hypothèse est que cela était dû à jongler avec cela, et peut-être parce que j'ai eu 2 pare-feu que j'ai ensuite démonté pour 1?
Il semblait que Symfony a vélo le PHPSESSID cookies, chaque page a frappé, il était en train de changer, de sorte que tout l'authentification a été sur une session qui n'a pas persisté jusqu'à la prochaine - et m'a donc fait le problème décrit.
Est-il un motif légitime, il y en avait 2 cookies?.. Assurément, il n'est même pas possible d'avoir 2 biscuits du même nom défini? Je n'ai pas étudier correctement avant de les effacer, je suppose que ça doit avoir eu différents chemins ou quelque chose?.. Mais pourtant, ils semblaient être présents sur chaque demande.
Un coup de poignard dans le noir, mais est-ce que votre classe d'utilisateur
getRoles()
méthode retourne un ROLE_USER en tout cas, car si cette méthode ne retourne rien, l'utilisateur sera considéré comme anonyme et n'est donc pas authentifié.Un autre coup de poignard dans le noir, il semble que vous rediriger vers
sonata_admin_dashboard
route, qui décide de/admin/dashboard
url. En fonction de vossecurity.yml
il semble que l'utilisateur doit avoirROLE_ADMIN
ouROLE_SONATA_ADMIN
rôle pour accéder à la page./login
ou/admin/login
?admin
du pare-feulogin_path
e.gadmin/login
. Voir icihandle()
méthode charges jeton de session etonKernelRequest
enregistre le jeton.contextKey
propriété de la classe les pare-feu nom. Vérifiez qu'il est en cours de chargement correct de jeton de sécurité basé sur le pare-feu.