gpt4 book ai didi

Symfony:防火墙、多个登录表单

转载 作者:行者123 更新时间:2023-12-02 17:37:37 25 4
gpt4 key购买 nike

无论如何,我对 symfony 都不陌生,但我一直使用 FOSUserBundle,默认情况下,它会阻止用户使用 2 个不同的登录表单来验证两种不同的用户类型。

我有两个实体,一个是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 。也许您忘记在路由配置中添加匹配的路由?

堆栈跟踪告诉我:警告 - 由于缺少“_controller”参数,无法查找 Controller

错误 - Symfony\Component\HttpKernel\Exception\NotFoundHttpException:无法找到路径“/admin/login_check”的 Controller 。也许您忘记在路由配置中添加匹配的路由? (未捕获的异常)位于/var/www/mysite.dev/symfony/app/bootstrap.php.cache 第 1419 行

最佳答案

要在 symfony 2XX 中实现多重登录,请尝试以下代码

安全.yml

security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Company\AngularBundle\Entity\User: plaintext
Company\AngularBundle\Entity\Admin: plaintext

role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
users:
entity: { class: CompanyAngularBundle:User, property: username }
admin:
entity: { class: CompanyAngularBundle:Admin, property: username }

firewalls:
admin_secured_area:
pattern: ^/admin
anonymous: ~
provider: admin
form_login:
login_path: /admin/login
check_path: /admin/login_check
default_target_path: /admin

user_secured_area:
pattern: ^/
anonymous: ~
provider: users
form_login:
login_path: login
check_path: login_check
default_target_path: /home

路由.yml

login_check:
path: /login_check
admin_login_check:
path: /admin/login_check

Twig 文件

Action of login form should be like this
<form action="{{ path('login_check') }}" method="post">

Action of admin/login form should be like this
<form action="{{ path('admin_login_check') }}" method="post">

关于Symfony:防火墙、多个登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15366637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com