0

我刚刚实现了自己的身份验证提供程序来执行 facebook 身份验证。它仅适用于一个请求,然后运行:

There is no user provider for user "Nourdine\BasicBundle\Security\User\FacebookUser"

事情是:

1 - 一个 FacebookProvider 在那里并且在踢。2 - 我将其注册为服务:

  <service id="facebook_user_provider" class="Nourdine\BasicBundle\Security\User\FacebookUserProvider" />

3 - 并使其在 security.xml 中可用

第一个问题:为什么他现在“看到”了它?第二个问题:是否必须在每次实现身份验证提供程序时创建相关的用户提供程序?

谢谢

4

1 回答 1

0

我认为您的用户提供程序 refreshUser 方法有问题。当您使用会话持久性(令牌被序列化并存储在会话中)时使用此方法,以便可以从数据库(或其他地方)获取用户的下一个请求。

  1. 它看到提供者,因为您将其注册为服务并在 security.yml 中使用服务 ID
  2. UserProvider 负责从数据库或其他层(webservice 或其他东西)获取用户和 AuthenticationProvider 对用户进行身份验证(执行身份验证逻辑),它可以使用提供程序,但在我们使用Symfony\Component\Security\Core\User\UserProviderInterface不具体实现的情况下大多数时候没有必要。所以不是强制性的
于 2012-12-21T21:49:43.383 回答