Symfony2可以在没有UserProviders的情况下工作吗?

时间:2015-11-12 15:34:42

标签: php symfony

这个问题的原因来自合作者的要求:我想知道我是否可以删除提供者。是强制性的?如果我可以将其方法留空,我想删除它。

因此,在Symfony 提供商配置强制。此外,我需要配置至少一个提供商。完成!我的定制服务是:

final class CustomListener implements UserProviderInterface                                                                
{                                                                                                                          
    public function loadUserByUsername($username)                                                                          
    {                                                                                                                      
        // ...                                                                                                             
    }                                                                                                                      

    public function refreshUser(UserInterface $user)                                                                       
    {                                                                                                                      
        return $user;                                                                                                      
    }                                                                                                                      

    public function supportsClass($class)                                                                                  
    {                                                                                                                      
        // ...                                                                                                             
    }                                                                                                                      
}

我可以登录。登出。 ......但我有点困惑。为什么界面想要这些"无用",目前loadUserByUSernamesupportsClass?没意思的意思是:我有空实现,而且有效!工作,意味着我使用$request->getSession()->set('firefall', $token);手动设置会话,并对用户进行身份验证。我可以注销用户使会话无效。

我确信至少,这个提供者需要刷新用户返回一个UserInterface:

    public function refreshUser(UserInterface $user)                                                                       
    {                                                                                                                      
        return $user;                                                                                                      
    }

因为如果没有此返回,登录将无效。但我可以将其他方法留空。

我查看了内部测试和UserProviderInterface方法的评论。但没什么。如果可以,我没有得到:

  • 删除提供商;
  • 我遗漏了文档中的内容;
  • 我试图严重使用Symfony(这是可能的);
  • 我是茶壶;
  • ...
  •   -

并且,....即使我的防火墙不使用此提供商,当我评论此行时,为什么登录不起作用?

    public function refreshUser(UserInterface $user)                                                                       
    {                                                                                                                      
        // return $user;                                                                                                      
    }

-

我已经创建了这个CustomListener,因为我已经定义了 作为提供者的服务。然后我收到了这条消息:

传递给Symfony \ Component \ Security \ Core \ Authentication \ Provider \ DaoAuthenticationProvider :: __ construct()的参数1必须是Symfony \ Component \ Security \ Core \ User \ UserProviderInterface的实例,

1 个答案:

答案 0 :(得分:1)

用户提供商告诉Symfony从哪里加载用户,因此您需要加载用户,但除非您拥有复杂的身份验证系统,否则您不需要创建自己的用户。

如果您从数据库加载用户,则可以使用默认的数据库提供程序http://symfony.com/doc/current/cookbook/security/entity_provider.html