【发布时间】:2018-11-15 06:59:27
【问题描述】:
我通过创建新的 symfony4 框架并将源代码从 symfony3.2 移动到 symfony4,将我的网站从 Symfony 3.2 更新到了 Symfony 4。
我已经进行了Upgrading Symfony4中提到的更改。我还安装了所有必需的包。现在我可以进行路由并成功地将我的网页显示在显示器上,我面临的问题是登录表单没有工作。
在我的 symfony3.2 版本的登录控制器中,
我使用了 security.encoder_factory 服务
当我在 symfony4 中运行它时,结果是:
The "security.encoder_factory" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.
我的控制器密码编码是:
public function loginAction(Request $request)
{
#$defaultEncoder = new MessageDigestPasswordEncoder('bcrypt', true, 5000);
$defaultEncoder = new MessageDigestPasswordEncoder('bcrypt');
$encoders = [
User::class => $defaultEncoder, // Your user class. This line specify you ant sha512 encoder for this user class
];
$encoderFactory = new EncoderFactory($encoders);
$data = [
'error' => null,
'_username' => null,
];
if ($request->isMethod('POST')) {
$_username = $request->request->get('_username');
$_password = $request->request->get('_password');
$data['_username'] = $_username;
$user = $this->getDoctrine()->getManager()
->getRepository("App:User")
->findOneBy(array('username' => $_username);
if (!$user) {
$data['error'] = 'User-Id does not exist';
return $this->render(
'login.html.twig',
$data
);
}
$encoder = $encoderFactory->getEncoder($user);
$salt = $user->getSalt();
#$encoder = $this->encodePassword($_password, $salt);
if (!$encoder->isPasswordValid($user->getPassword(), $encoder)) {
$data['error'] = 'User-Id or Password not valid.';
return $this->render(
'login.html.twig',
$data
);
}
return $this->redirect($this->generateUrl('default__home_page'));
}
return $this->render(
'login.html.twig',
$data
);
}
我的编码安全性是:
security:
encoders:
App\Entity\User: bcrypt
App\Security\User\WebserviceUser: bcrypt
Symfony\Component\Security\Core\User\User: bcrypt
FOS\UserBundle\Model\UserInterface: sha512
# https://symfony.com/doc/current/security.html#where-do-users-come-from- user-providers
providers:
#in_memory: { memory: ~ }
our_db_provider:
entity:
class: App:User
property: username
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
anonymous: ~
pattern: ^/s/login$
http_basic: ~
provider: fos_userbundle
user_checker: security.user_checker
form_login:
login_path: login_page
check_path: login_page
failure_handler: security.authentication.failure_handler
guard:
authenticators:
- App\Security\LoginControllerAuthenticator
# activate different ways to authenticate
# http_basic: ~
# http://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
# form_login: ~
# http://symfony.com/doc/current/cookbook/security/form_login_setup.html
logout:
path: /logout/
target: /login/
是否有任何替代方法或服务可以按照上述代码对我的密码进行编码。
错误:
No encoder has been configured for account "App\Entity\User".
at vendor/symfony/security/Core/Encoder/EncoderFactory.php:51
at Symfony\Component\Security\Core\Encoder\EncoderFactory->getEncoder(object(User))
(src/Controller/Controller.php:65)
at App\Controller\Controller->loginAction(object(Request))
(vendor/symfony/http-kernel/HttpKernel.php:149)
at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
(vendor/symfony/http-kernel/HttpKernel.php:66)
at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
(vendor/symfony/http-kernel/Kernel.php:188)
at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
(public/index.php:37)
提前致谢。
【问题讨论】:
标签: symfony4 symfony-3.2