【问题标题】:Failed authentication in silex SecurityServiceProvidersilex SecurityServiceProvider 中的身份验证失败
【发布时间】:2016-11-23 17:03:43
【问题描述】:

我正在尝试将网页的管理部分置于身份验证之下 我已经设法配置了用户和密码,但是当我使用 用户和各自的密码登录失败。我该如何调试呢? 可能是什么问题?

$app['security.encoder.digest'] = function ($app) {
    // uses the password-compat encryption
    return new BCryptPasswordEncoder(10);
};


$app['security.encoder_factory'] = function ($app) {
    return new EncoderFactory(
        array(
            'Symfony\Component\Security\Core\User\UserInterface' => $app['security.encoder.digest']
        )
    );
};

$app->register(new Silex\Provider\SecurityServiceProvider(), array(   
    'security.firewalls' => array(
        'admin' => array(
            'pattern' => '^/admin',
            'http'  => true,
            'users' => function () use ($app) {
                $dbs = new \FMP\Service\DbService($app);
                return new UserProvider($dbs->getDb(), $app['form.factory']);
            }
        )
    )
));

我使用这个设置用户密码:

 $encoder = $encoderFactory->getEncoder($user);

 // compute the encoded password for foo
 $password = $encoder->encodePassword($user->getPassword(), $user->getSalt());

日志:

[2016-11-24 15:41:51] app.DEBUG: 初始化用户系统 [] [] [2016-11-24 15:41:51] app.INFO:匹配路线“{route}”。 {"route":"GET_admin_users","route_parameters":{"_controller":"[object] (关闭: {})","_route":"GET_admin_users"},"request_uri":"http://dev.fmp2/admin/users","method":"GET"} [] [2016-11-24 15:41:51] app.INFO: 一个 AuthenticationException 是 抛出;重定向到身份验证入口点。 {“异常”:“[对象] (Symfony\Component\Security\Core\Exception\AuthenticationCredentialsNotFoundException(代码: 0):在 TokenStorage 中没有找到 Token。在 /home/andref/workspace/fmpsite2/vendor/symfony/security/Http/Firewall/AccessListener.php:53)"} [] [2016-11-24 15:41:51] app.DEBUG:调用认证入口 观点。 [] [] [2016-11-24 15:41:51] app.DEBUG:

【问题讨论】:

  • 你是如何为用户设置密码的?您是否尝试过使用纯文本编码器?
  • 去试试
  • 即使使用 PlaintextPasswordEncoder() 我也无法进行身份验证。我尝试调试函数 loadUserByUsername($username) 但它没有被调用
  • 添加 monolg 记录器提供程序,并启用调试并检查日志,安全组件大喊大叫。将它们粘贴在这里,让我们再试一次 :-) PD:当您更改编码器时,您必须更改数据库上的密码(存储的密码必须使用为安全组件配置的相同编码器进行编码),我假设您这样做了那已经...
  • 从日志看来您并没有尝试输入用户密码,它只是寻找一个安全令牌(使用安全 cookie),但它只是说找不到。没有检查用户或密码

标签: php silex


【解决方案1】:

不见了

  1 <IfModule mod_rewrite.c>
  2     Options -MultiViews
  3 
  4     RewriteEngine On
  5     #RewriteBase /path/to/app
  6     #RewriteRule ^/admin - [L,NC]
  7     RewriteCond %{HTTP:Authorization} ^(.+)$
  8     RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  9     RewriteCond %{REQUEST_FILENAME} !-d
 10     RewriteCond %{REQUEST_FILENAME} !-f
11     RewriteRule ^ index.php [QSA,L]
12 </IfModule>

.htaccess 文件的第 7 行和第 8 行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多