我对symfony并不陌生,但我一直使用的是默认情况下防止针对两种不同用户类型进行身份验证的FOSUserBundle
。
我有两个实体,一个是Admins
,另一个是Users
。只有管理员才能在管理区域登录,而用户只能通过前端登录。
我遵循了以下文档:http://symfony.com/doc/2.1/book/security.html,其中还引导我查看了http://symfony.com/doc/2.1/cookbook/security/entity_provider.html
我的security.yml如下:
jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
Symfony\Component\Security\Core\User\User: sha512
Fm\AdminBundle\Entity\Admins: sha512
Fm\MainBundle\Entity\Users: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
chain_provider:
chain:
providers: [in_memory, admin]
in_memory:
memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
admin:
entity: { class: Fm\AdminBundle\Entity\Admins, property: username }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
anonymous: true
alogin:
pattern: ^/admin/login
security: false
login:
pattern: ^/login
security: false
secured_area:
pattern: ^/admin
anonymous: false
provider: chain_provider
switch_user: true
form_login:
check_path: /admin/login_check
login_path: /admin/login
logout:
path: /admin/logout
target: /admin
members_area:
pattern: ^/
anonymous: false
form_login: ~
logout:
path: /logout
target: /
#anonymous: ~
#http_basic:
# realm: "Secured Demo Area"
access_control:
- { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, roles: ROLE_ADMIN }
在我的路由中,我按照文档定义了路由:(默认为/admin/login和/admin/login_check,因为我的主路由包含设置/admin)
_admin_login:
pattern: /login
defaults: { _controller: FmAdminBundle:Security:login }
_admin_login_check:
pattern: /login_check
我在浏览器中遇到的错误是:
无法找到路径“/admin/login_check”的控制器。也许您忘记在路由配置中添加匹配路由了?
堆栈跟踪告诉我:警告-由于缺少“_controller”参数,无法查找控制器
以及
错误-Symfony\Component\HttpKernel\Exception\NotFoundHttpException:无法找到路径“/admin/login_check”的控制器。也许您忘记在路由配置中添加匹配路由了?(未捕获的异常)位于/var/www/mysite.dev/symfony/app/bootstrap.php.cache第1419行
provider: chain_provider
应该使我能够使用in_memory和admin提供程序(因为这是列出的内容)...如果我输入用户名admin和密码admin pass-它会重定向回登录屏幕,并显示“Bad Credentials”错误(目前数据库中没有用户)。有什么想法吗? - Justinadminpass
,而不是admin pass
。另外,请检查一下Symfony安全组件的日志,看看是否一切都按预期工作。 - dbrumann