【问题标题】:Could Symfony2 works without UserProviders?Symfony2 可以在没有 UserProviders 的情况下工作吗?
【发布时间】:2015-11-12 15:34:41
【问题描述】:

这个问题的原因是从一个合作者的请求中产生的:我想知道我是否可以删除提供者。是强制性的?如果我可以将其方法留空,我想将其删除。

因此,在 Symfony 中,providers 配置是强制。我还需要配置至少一个提供者。完毕!我的自定义提供者是这样的:

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 方法的 cmets。但什么都没有。如果可以,我没有得到:

  • 移除提供者;
  • 我在文档中遗漏了一些内容;
  • 我正在尝试错误地使用 Symfony(有可能);
  • 我是一个茶壶;
  • ...
  • -

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

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

--

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

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

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    用户提供者告诉 Symfony 从哪里加载用户,所以你需要一个,但你不需要创建自己的,除非你有一个复杂的身份验证系统。

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

    【讨论】:

    • 我没有数据库。我只有一个用于用户身份验证的 API,也用于提供数据。我没有使用 Doctrine。
    • 如果您使用 API,您的身份验证如何与空的用户提供程序一起工作? Symfony 如何知道如何加载用户?你必须有其他人做同样的工作
    • 在控制器内部,我使用 HTTP 客户端询问 API 凭据是否良好,如果它返回给我一些特定值,我会这样做:$request->getSession()->set('_security_secured_area', $this->token->createFromRequest($request));
    • 您的身份验证逻辑应该在身份验证提供程序内部而不是在控制器中,并且覆盖 _security 会话变量是一种不好的做法,您可以使用这个symfony.com/doc/current/cookbook/security/… 或只是谷歌 Symfony api 身份验证,很多那里的例子
    • 嗯,你是我的橡皮鸭!谢谢你。我会修复一些东西,......呃,......我做了一个多么糟糕的问题=(
    猜你喜欢
    • 2019-01-14
    • 2014-08-22
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 2019-03-27
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多