我试图在Symfony中编码一个密码,在仔细遵循这里的文档之后,似乎我仍然做错了什么。
这是我的注册控制器.php:
<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\Type\UserType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class RegisterController extends AbstractController
{
private $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder)
{
$this->passwordEncoder = $passwordEncoder;
}
/**
* @Route("/register", name="user.register")
*/
public function create(Request $request)
{
$user = new User();
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$user->setPassword(
$this->passwordEncoder->encodePassword( $user, $user->getPassword() )
);
以上返回以下错误:
属性“plainPassword”和方法“getPlainPassword()"、“plainPassword()"、“isPlainPassword()"、“hasPlainPassword()"、”__get()”中的任何一个都不存在,并且在类“应用\实体\用户”中不具有公共访问权限。
下面是我的Register.twig.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{% block title %}Register{% endblock %}</title>
{# {% block stylesheets %}{% endblock %} #}
</head>
<body>
<div class="container">
<h2 class="form-signin-heading">Welcome, please register below</h2>
{{ form(form) }}
</div>
</body>
</html>
最后,我在security.yaml
文件中有这样的设置:
security:
encoders:
App\Entity\User:
algorithm: auto
我想这是我忽略的一些简单的东西,但我不能让它工作。这是我第一次使用Symfony
。
5条答案
按热度按时间rdlzhqv91#
实际上,这是因为symfony检测到用户实体中是否没有“plainPassword”属性。使用此“plainPassword”属性的目的是作为临时数据,因此我们可以对其进行编码。您需要做的是在表单类型中将“plainPassword”属性Map为false。
并在你的控制器中将“plainPassword”编码为“password”编码:
u0njafvf2#
问题出在别处。
如果你调用的“plainPassword”方法不存在,在你的分支或表单中检查,并用“password”替换它。
n9vozmp43#
这个错误似乎是在twig文件中。您尝试显示
$plainPassword
成员,但它很可能没有在实体上定义(在我开始symfony的路上,经常发生这个错误)。尝试删除它,然后检查错误。至于密码的编码,请看这个网址,因为它解释了密码是如何在security.yml文件中加密的。你需要定义将要编码的类,算法可以更改为自定义的,你可以构建,为此,请检查this URL。
编码没有那么复杂,但错误与编码无关,所以请尝试这个并更新帖子。
vcirk6k64#
所以,我发现了这个错误,唉!我在UserType.php中设置了
plainPassword
字段:将其更改为
password
(就像我在User
实体中所做的那样)可以更正错误。谢谢大家的帮助。
p3rjfoxz5#
自Symfony 5.3起,UserPasswordEncoderInterface已被弃用,取而代之的是UserPasswordHasherInterface。有关详细信息,请参阅本文。Symfony 6 fixtures UserPasswordHasherInterface