【问题标题】:Silex - UserProviderInterface always returns "Bad credentials"Silex - UserProviderInterface 总是返回“错误的凭据”
【发布时间】:2016-10-15 16:06:38
【问题描述】:

我正在尝试使用 SecurityProvider 将保存在数据库中的用户添加到我的 Silex 网站。

我注册了安全提供者

$app['security.firewalls'] = array
(
    'admin' => array
    (
        'pattern' => '^/admin',
        'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'),
        'logout' => array('logout_path' => '/admin/logout', 'invalidate_session' => true),
        'users' => function() use($app) 
        { 
            return new Entity\UserProvider($app); 
        }
    )
);

Entity\UserProvider($app) 类如下(仅显示部分代码)

class UserProvider implements UserProviderInterface
{
    public function loadUserByUsername($username)
    {     
        return new User('blabla', 'patate', ['ROLE_ADMIN'], true, true, true, true);
    }
}

但即使我返回一个新用户,并且不抛出 UsernameNotFoundException 登录页面仍然给我一个 Bad credentials. 消息。

为什么我会收到这个错误的凭据消息?我忘了什么吗?我搞砸了一些配置吗?

谢谢

【问题讨论】:

  • 如何将用户添加到数据库?
  • 目前没有用户,也没有到数据库的链接。我只是想在创建与数据库的链接之前使用假数据设置用户系统。

标签: php symfony authentication silex


【解决方案1】:

在 silex 和创建用户时使用的密码编码器算法不同。

silex中的编码器由参数security.default_encoder设置

$app['security.default_encoder'] = function ($app) {
    return $app['security.encoder.bcrypt'];
};
...
$app['security.encoder.bcrypt'] = function ($app) {
    return new BCryptPasswordEncoder($app['security.encoder.bcrypt.cost']);
};

在创建用户时使用bcrypt 进行密码编码

return new User(
    'blabla',
    $app['security.encoder.bcrypt']->encodePassword('patate', ''),
    ['ROLE_ADMIN'],
    true, true, true, true
);

或者将silex编码器改成纯文本(不编码)来检查登录是否有效

$app['security.default_encoder'] = function ($app) {
    return new \Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder();
};

【讨论】:

    【解决方案2】:

    感谢 Max P. 的回答,您引导我找到了解决方案。你让我想知道为什么你会在我使用假数据时谈论密码加密,所以我检查了如果我在所有地方使用完全相同的值会发生什么。

    唯一的问题是我使用了假数据。我假设我在登录表单中提供的数据会直接被遗忘,但实际上 Silex 确保表单中的数据与返回的用户实体中的数据匹配。

    如果不是,它会隐式抛出“错误凭据”错误。 (如果 silex 日志能告诉我,那就太好了……)

    【讨论】:

      猜你喜欢
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多