【问题标题】:Manually encrypt user password in Symfony php在 Symfony php 中手动加密用户密码
【发布时间】:2017-11-07 21:39:56
【问题描述】:

我需要以与Symfony 相同的方式手动加密密码。

$user->setPlainPassword($password);
$userManager->updateUser($user);

这是保存用户密码的应用程序代码。但它显然是加密的(不像方法所说的那样简单)。

对于给定的密码,如何手动获得相同的结果?

编辑1:

问题是我想在用户控制器代码中手动验证用户。我有可读的用户名和密码作为参数。如果数据库中不存在它们,我想返回 401。

【问题讨论】:

  • 你用密码做什么?
  • @zaph 我需要密码才能将其与数据库中的密码进行比较。基本上我需要在 php 代码中手动验证用户。
  • 我刚刚将您的问题标题“在 Symfony php 中手动加密用户密码”复制粘贴到谷歌。你不会相信 - 第一项正是你想要的。
  • 您不需要密码您需要密码验证器。密码验证器是密码的一种表示,不能通过反转来恢复密码。创建时,密码通过验证程序运行并保存结果。在验证时,e 验证的密码再次通过验证器运行,并将结果与​​保存的验证器进行比较。对于 php,有一对简单而安全的方法:password_hash()password_verify()。见密码hash & verify

标签: php symfony encryption passwords


【解决方案1】:

在较新的 Symfony 版本(5.3+)中,您可以通过运行 CLI 命令来完成:

bin/console security:hash-password

【讨论】:

    【解决方案2】:

    在你的控制器动作中试试这个:

    $encoder = $this->get('security.encoder_factory')->getEncoder($userClass);
    $encodedPassword = $encoder->encodePassword($plainPassword);
    

    【讨论】:

    【解决方案3】:

    Symfony 提供了一个有用的命令来像它一样对密码进行编码:

    bin/console security:encode-password 'your_plain_password' 'AppBundle\Entity\YourUserClass'
    

    【讨论】:

    • @eomeroff 你可以查看security:encode-password 来源,看看他们是如何做到的。说真的,不要那么懒惰。
    • @eomeroff 获取 IDE 以快速浏览代码。对于 Symfony,我们主要使用 PHPStorm。
    • 或者只是在 symfony 控制台中查看可能的命令,简单如 bonjour ;)
    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2018-11-13
    • 2010-10-23
    • 2012-05-06
    相关资源
    最近更新 更多