【发布时间】:2014-07-14 18:07:41
【问题描述】:
我正在使用 Symfony2 开发一个网站,直到今天 - 登录没有问题。但现在登录时我没有正确验证 - Symfony 分析器将我列为logged in as: anon 而不是我登录的用户.我也被重定向回登录页面而不是目标路径。
登录过程由带有提交按钮的传统登录表单(即用户名 + 密码)组成。所有用户凭据都存储在 MySQL 中,并且我已将 User 实体设置为提供者。
我的 php 错误日志中没有错误,或者在 Symfony 分析器中的 Exception 或 Logs 下没有列出。
我的一个观察是会话属性标题下没有列出任何内容(在 Symfony 分析器 > 请求中) - 通常在成功登录后会列出一些安全上下文信息,但现在它总是空的。我尝试在主页上设置一个基本会话变量,该变量在设置时部分成功并显示在会话属性下,但每当尝试登录时都会被清除!
这是我的 security.yml 文件:
# app/config/security.yml
security:
encoders:
Woodcut\UserBundle\Entity\User: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
main:
entity: { class: Woodcut\UserBundle\Entity\User, property: username }
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: login
check_path: login_check
username_parameter: _username
success_handler: custom_authentication_handler
failure_handler: custom_authentication_handler
#always_use_default_target_path: true
#default_target_path: /login_router
logout:
path: /logout
target: /
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/ratings/update, roles: ROLE_USER }
- { path: ^/ratings/new, roles: ROLE_USER }
- { path: ^/favourite, roles: ROLE_USER }
我正在使用典型的 LAMP 堆栈在 Ubuntu 12.04 虚拟机上使用 Symfony 2.3.13 和 PHP 5.4.28 运行我的网站。 PHP 作为 mod_php 运行。
Symfony Profiler 的输出 > 调试:
INFO - Populated SecurityContext with an anonymous Token
DEBUG - Notified event "kernel.exception" to listener "Symfony\Component\Security\Http\Firewall \ExceptionListener::onKernelException".
DEBUG - Access is denied (user is not fully authenticated) by "/vagrant_www/vprojects/woodcut/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php" at line 70; redirecting to authentication entry point
DEBUG - Calling Authentication entry point
如果有人可以帮助我确定为什么用户被认证为匿名而不是他们自己,那就太好了。过去两天一直在努力寻找原因。
提前感谢您提供的任何帮助!
其他信息:我有一个运行网站副本的 VPS(用于客户预览)。我在本地 VM 上开发并 git push 我的更改,然后我通过 SSH 连接到我的 VPS 并执行 git pull 以保持我的两个版本同步。
奇怪的是 VPS 版本没有显示这个问题(即登录工作正常)但两个版本都使用相同的代码库,除了它们各自的 parameters.yml 和 parameters_dev.yml 文件中有一些细微差别.
更新:在对代码库进行大量编辑并在我的 VM 上执行 apt-get update 和 apt-get upgrade 后,问题开始出现。因此,为了隔离可能的原因,我回滚到较早的提交 - 看看问题是否与代码相关。但是尽管回滚到我的主要编码更改之前,问题仍然存在。
这让我想到原因可能不与代码相关,而可能与服务器相关,可能是通过 apt-get upgrade 安装的新版本 PHP (5.4.28) 中的某些东西,或者新的 php.ini 指令可能吗?
我已经运行了 Symfony 配置检查工具,一切似乎都很好!
很奇怪。
【问题讨论】:
-
您在哪里(确切地说是 url)检查您的安全会话?请尝试在 /admin od /ratings/new 上检查它
-
我猜是因为您没有为防火墙设置任何提供程序。在匿名 provider: main 之后添加这个
-
@PiotrPasich 我从 /admin 中检查了我的会话,在 Symfony Profiler 下 - 包含的会话属性:_security.secured_area.target_path "localhost:8888/vprojects/woodcut/web/app_dev.php/admin"。然后我被重定向回 /login。
-
@ElPoney 问题仍然存在。
-
有人对此有任何想法吗?再次感谢!
标签: php mysql session symfony authentication