有没有办法从UserAuthenticationProvider
删除默认身份验证提供程序$app['security.authentication_manager']
?
我创建了自己的身份验证提供程序,并且我不想使用默认的一个调用DaoAuthenticationProvider
来检查用户密码,因为身份验证过程不起作用。
此时,身份验证管理器调用2个身份验证提供程序:我的自定义和默认提供程序。为了允许成功的身份验证,我覆盖DAO以跳过测试,但它不干净。
自定义身份验证提供程序
$app['security.authentication_listener.factory.sds'] = $app->protect(function ($name, $options) use ($app) {
// define the authentication provider object
$app['security.authentication_provider.'.$name.'.sds'] = function () use ($app) {
return new CustomAuthenticationProvider($app['user.provider'], $app['security.encoder_factory']);
};
// define the authentication listener object
$app['security.authentication_listener.'.$name.'.sds'] = function () use ($app) {
return new CustomAuthenticationListener($app['security.token_storage'], $app['security.authentication_manager']);
};
return array(
// the authentication provider id
'security.authentication_provider.'.$name.'.sds',
// the authentication listener id
'security.authentication_listener.'.$name.'.sds',
// the entry point id
null,
// the position of the listener in the stack
'pre_auth'
);
});
覆盖DAO以使用自定义calss并跳过测试。 我想通过从身份验证管理器中删除DAO调用来避免这一点。
$app['security.authentication_provider.dao._proto'] = $app->protect(function ($name) use($app) {
return new \Trilogis\Classes\CustomUserAuthenticationProvider(
$app['security.user_provider.' . $name],
$app['security.user_checker'],
$name,
$app['security.encoder_factory']
);
});
答案 0 :(得分:0)
只是一个快速猜测,但你可以尝试覆盖$app['security.authentication_providers']
数组,以便只启用你的。
<?php
//...
// overriding available providers to only allow mine
$app['security.authentication_providers'] = [
$app['security.authentication_listener.factory.sds']
];
通过覆盖它,你是configuring the Authentication Manager with only one provider。
恕我直言,这比覆盖DaoAuthenticationProvider更清洁