Sonata、Symfony、密码加密、原则侦听器/订户
信息服务:我不熟悉Symfony和SonataSonata、Symfony、密码加密、原则侦听器/订户,symfony,doctrine-orm,doctrine,password-encryption,sonata,Symfony,Doctrine Orm,Doctrine,Password Encryption,Sonata,信息服务:我不熟悉Symfony和Sonata 我的目标:仅为数据库端加密密码。我可以清楚地显示这个密码。所有这些都适用于实体服务中的密码字段 我在试什么我试图创建一个使用bcrypt加密的条令侦听器 安全: 编码器: 应用程序\实体\服务:bcrypt 这是我的App\doctor中的HashPasswordLisetener.php(在App\Admin\ServiceAdmin.php中我的configureFormField函数的$formMapper中,我有一行类似于这样
- 我在试什么我试图创建一个使用
加密的条令侦听器 安全: 编码器: 应用程序\实体\服务:bcryptbcrypt
这是我的App\doctor中的HashPasswordLisetener.php(在App\Admin\ServiceAdmin.php中我的configureFormField函数的$formMapper中,我有一行类似于这样的
->add('password')
)
- 它给我的结果是:
- 我的问题是: 我知道函数encodePassword正在第一个arg(而不是我的实体)中等待用户接口,密码在第二个arg中等待加密,但我不知道谁在使用此用户接口?我该怎么称呼它呢?要得到它吗?发送它
感谢您至少花时间阅读。我遇到了一个问题,但我正在编写一种哈希类型的代码,但我正在寻找一种加密方法。但我是这样处理工作哈希的:
- 步骤1:在我的服务实体中实现UserInterface
- 步骤2:在侦听器中为UserPasswordEncoderInterface替换UserPasswordEncoder
- 步骤2.5:添加了
所需的所有函数,如用户界面
擦除凭据
。。请参阅:以了解更多详细信息getSalt()
- 步骤3:添加一个
,其中getUsername
返回此->标识符
- 步骤4:在表单字段中使用
,而不是普通密码
密码
- 步骤5:添加一个提供程序:
应用程序用户:
entity: class: 'App\Entity\Service' property: 'identifier'
- 步骤6:使用
作为TextType::class
表单字段类型+修复plainPassword
: Symfony\Component\Form\Extension\Core\Type\TextType使用
- 步骤7:工作
(特别感谢@msg,他帮了我很多忙)
UserInterface
在全世界都有使用。只需让您的服务
实体实现它。但是如果您不想,您可以使用PasswordEncoder
而不是UserPasswordEncoder
,请参见EncoderFactory
。好的,我将尝试tytype提示它为UserPasswordEncoderInterface
,就像您以前使用的那样。这不一定是用户名
字段,只是唯一标识用户帐户的一种方法。我猜在您的情况下,只需删除abstract
关键字并使其return$this->identifier代码>。您确定正在调用侦听器吗?另一方面,setPassword
只应由侦听器调用,不应该以明文密码结束,表单映射正确吗?
<?php
namespace App\Entity;
use App\Admin\AbstractAdmin;
use App\Repository\ServiceRepository;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity(repositoryClass=ServiceRepository::class)
*/
class Service implements UserInterface
{
use TimestampableEntity;
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=255)
*/
private $password;
/**
* @ORM\Column(type="text", nullable=true, length=255)
*/
private $comment;
/**
* @ORM\Column(type="string", length=255)
*/
private $identifier;
private $plainPassword;
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
public function getPassword(): ?string
{
return $this->password;
}
public function setPassword(string $password): self
{
$this->password = $password;
return $this;
}
public function getComment(): ?string
{
return $this->comment;
}
public function setComment(?string $comment): self
{
$this->comment = $comment;
return $this;
}
public function getIdentifier(): ?string
{
return $this->identifier;
}
public function setIdentifier(string $identifier): self
{
$this->identifier = $identifier;
return $this;
}
/**
* @return mixed
*/
public function getPlainPassword()
{
return $this->plainPassword;
}
/**
* @param mixed $plainPassword
*/
public function setPlainPassword($plainPassword): void
{
$this->plainPassword = $plainPassword;
$this->password = null;
}
public function getRoles()
{
return array('ROLE_USER');
}
public function getSalt()
{
}
public function eraseCredentials()
{
$this->plainPassword = null;
}
public function getUsername()
{
return $this->identifier;
}
}
app.doctrine.hash_password_listener:
class: App\Doctrine\HashPasswordListener
autowire : true
tags:
- { name: doctrine.event_subscriber, connection: 'default' }
entity:
class: 'App\Entity\Service'
property: 'identifier'