2015-11-12 123 views
0

这一问题的原因是从合作者的要求,诞生了:我想知道我是否可以删除提供商。是强制性的?如果我可以将其方法留空,我想删除它。Symfony2可以在没有UserProvider的情况下工作吗?

所以,在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);手动设置会话,并且用户已通过身份验证。我可以注销用户失效会话。

我相信,至少,这个供应商需要的是refreshUser返回的UserInterface:

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

因为登录不没有这个回报的工作。但是我可以将其他方法留空。

我看着里面测试,并在UserProviderInterface方法的意见。但没有。我没有得到,如果我可以:

  • remove provider;
  • 我错过了文档中的东西;
  • 我试图用严重的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

用户提供通知的Symfony从哪里加载的用户,所以你需要一个,但你并不需要创建自己的,除非你有一个复杂的认证系统。

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

+0

我不是一个数据库。我只是一个用于用户身份验证的API,并且还提供数据。我没有使用教义。 – sensorario

+0

如果您使用的是API,那么您的身份验证如何与空的用户提供者协同工作? Symfony如何知道如何加载用户? –

+0

在控制器内部,我使用HTTP客户端来询问API是否良好,如果它返回给我一些特定的值,我这样做:'$ request-> getSession() - > set('_ security_secured_area',$ this-> token-> createFromRequest($ request));' – sensorario

相关问题