经过一整天的努力与Symfony 2的简单挣扎没有运气之后,我决定让你们找一个解决方案。
问题在于:我想使用doctrine进行http_basic身份验证,因此系统会提示用户输入保存在数据库中的用户名/密码。
所以,我按照以下步骤操作:
1)使用交互式控制台生成器创建了一个名为User的新实体。
这就是它的样子:
2)如文档中所述,我实现了UserInterface并添加了4个缺失的方法。现在实体看起来像这样:
3)我已经尽可能少地修改了security.yml以使其工作,它看起来像这样:
我清除了缓存并尝试访问app_dev.php / admin,当然我整天都收到同样的错误:
用户“Symfony \ Component \ Security \ Core \ User \ User”没有用户提供程序。
500内部服务器错误 - RuntimeException
谁能告诉我问题出在哪里? 我已经尝试了这千种不同的方式,奇怪的是它工作了一会儿,但是当我尝试将sha1添加为编码器算法而不是明文,并清除缓存时,我又回到了同样的错误...从那时起我什么也没得到它。就好像symfony决定是否有一个隐藏的缓存被删除:D
我认为错误也可能出现在实体的4种方法中,但我无法修复它们,因为没有关于它们应该做什么的文档。
我目前正在使用RC4。
提前致谢,希望有人能提供帮助。
答案 0 :(得分:8)
我曾经遇到过这个问题。
这是因为我使用前一个提供程序(in_memory)中的用户进行了记录。必须恢复in_memory部分,注销然后放入新的提供者。
我的猜测:
用户的信息在会话中,因为我们把它从security.yml上取下来所以无法访问它。
答案 1 :(得分:4)
有同样的问题。看来这很有效。我稍后会在开发过程中使用它,我会找到解决方案。!
security:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
chain_provider:
providers: [in_memory, user_db]
in_memory:
users:
cheese: { password: olo, roles: ROLE_ADMIN }
user_db:
entity: { class: Abc\BaseBundle\Entity\User, property: username }
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Abc\BaseBundle\Entity\User: plaintext
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
panel:
pattern: ^/(panel|login_check)
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
default_target_path: /panel/
logout:
path: /logout
target: /
答案 2 :(得分:0)
你可以省去头痛并尝试symfony UserBundle的朋友。
至少看一下这个包会帮助你学习和修复你自己的代码。它有很多编写良好的代码/示例。
答案 3 :(得分:0)
对我来说在开发环境中出现了问题。之所以发生这种情况,是因为我有来自其他项目的活跃会话。
清理浏览器Cookie有帮助。