如何在Symfony 5中对密码进行编码?

问题描述 投票:-2回答:2

我正在尝试在Symfony中对密码进行编码,在认真遵循文档here之后,看来我还是做错了。

这是我的RegisterController.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()”都不存在,并且在类“中没有公共访问权限” App \ Entity \ User“。

这是我的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

php symfony password-encryption
2个回答
0
投票

问题出在其他地方。

如果您调用“ plainPassword”方法,请检查树枝或表单,如果不存在,请用“ password”代替。


0
投票

错误似乎在树枝文件中。您尝试显示$plainPassword成员,但很可能未在实体上定义它(在我开始使用symfony的方式中,发生此错误的次数很多)。尝试将其删除,然后检查错误。

关于密码的编码,请查看this url,因为它说明了如何在security.yml文件中加密密码。您需要定义将要编码的类,可以为自定义的类更改算法,可以对其进行构建,为此,请检查this URL

编码不是那么复杂,但是错误与编码无关,所以请尝试一下并更新文章。


0
投票

所以,我发现了错误a!我在UserType.php中设置了字段plainPassword

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
        ->add('firstname', TextType::class)
        ->add('lastname', TextType::class)
        ->add('email', EmailType::class)
        ->add('birthdate', DateType::class)
        ->add('plainPassword', RepeatedType::class, array(
            'type' => PasswordType::class,
            'first_options'  => array('label' => 'Password'),
            'second_options' => array('label' => 'Repeat Password'),
        ))
        ->add('save', SubmitType::class, ['label' => 'Register']);
    }
...

像我在password实体中那样将其更改为User可纠正错误。

谢谢大家的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.