gpt4 book ai didi

symfony - 即使在公共(public)页面登录也是匿名 token

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

我在设置安全性时遇到了一些问题。

我希望一个页面既可以被匿名成员访问,也可以被登录成员访问。我希望它根据情况显示不同的内容(实际上,我想在进行时仍然以成员(member)身份登录)。

我想公开访问的页面是 ^/profile。

我这样设置我的 security.yml :

jms_security_extra:
secure_all_services: false
expressions: true

security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
FOS\UserBundle\Model\UserInterface: sha512

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

providers:
fos_userbundle:
id: fos_user.user_provider.username_email

firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false

# Firewall pour les pages de connexion, inscription, et récupération de mot de passe
login:
pattern: ^/(login$|register|resetting) # Les adresses de ces pages sont login, register et resetting
anonymous: true # On autorise bien évidemment les anonymes sur ces pages # Firewall principal pour le reste de notre site
public:
pattern: ^/profile
anonymous: true
homepage:
pattern: ^/$
anonymous: true
main:
pattern: ^/ # ^/ = tout ce qui commence par / = tout notre site
form_login: # On définit notre méthode d'authentification
provider: fos_userbundle # On lie l'authentification au provider définit plus haut
remember_me: true # On active la possibilité du "Se souvenir de moi" (désactivé par défaut)
remember_me:
key: %secret% # On définit la clé pour le remember_me (%secret% est un parametre de parameters.yml)
anonymous: false # On autorise les utilisateurs anonymes (non identifiés)
logout: true # On autorise la déconnexion manuelle (désactivé par défaut)
#anonymous: ~
#http_basic:
# realm: "Secured Demo Area"

access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }

我的问题是,当我登录并访问此页面时,就好像我没有登录(我有登录按钮),因为防火墙给了我一个匿名 token 。

感谢您的帮助。脚手架

最佳答案

身份验证中的常见陷阱:

Multiple firewalls don't share security context
If you're using multiple firewalls and you authenticate against one firewall, you will not be authenticated against any other firewalls automatically. Different firewalls are like different security systems. To do this you have to explicitly specify the same Firewall Context for different firewalls. But usually for most applications, having one main firewall is enough.

所以把所有的都放在一个主防火墙下并使用 ACL,就像在 FOSUSerBundle installation step 4 中一样.

jms_security_extra:
secure_all_services: false
expressions: true

security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
FOS\UserBundle\Model\UserInterface: sha512

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

providers:
fos_userbundle:
id: fos_user.user_provider.username_email

firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false

main:
pattern: ^/
form_login:
provider: fos_userbundle
remember_me: true
logout: true
anonymous: true
remember_me:
key: %secret%

access_control:
- { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }

关于symfony - 即使在公共(public)页面登录也是匿名 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16949904/

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