Symfony2 创建自己的编码器来存储密码

2024-04-17

我是 Symfony2 的新手,我可能有一个关于在数据库中编码用户密码的简单问题。

我想以这种方式编码并存储在数据库中我的用户密码:

encoded_password = salt . sha1 ( salt . raw_password )

我找到了各种编码器(sha1、sha512、明文),我看到我的数据库 raw_password{salt} 中有明文,但我仍然对 Symfony2 中的 signin/login/getSalt() 方法感到不舒服。

如果您可以帮我解决这个问题(请假设我不想使用现有的用户管理包,我想制作自己的包),那就太棒了!

Thanks

EDIT:

我可以在我的signinAction()中做到这一点:

$salt = substr(md5(time()),0,10);
$pwd = $encoder->encodePassword($user->getPassword(), $salt);
$user->setPassword($salt.$pwd);

我可以在 getSalt() 中做到这一点:

return substr($this->password,0,10);

但我目前在我的 loginAction() 中只有这个:(参见此处:http://symfony.com/doc/current/book/security.html http://symfony.com/doc/current/book/security.html)

// src/Acme/SecurityBundle/Controller/Main;
namespace Acme\SecurityBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;

class SecurityController extends Controller
{
    public function loginAction()
    {
        $request = $this->getRequest();
        $session = $request->getSession();

        // get the login error if there is one
        if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
            $error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
        } else {
            $error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
        }

        return $this->render('AcmeSecurityBundle:Security:login.html.twig', array(
            // last username entered by the user
            'last_username' => $session->get(SecurityContext::LAST_USERNAME),
            'error'         => $error,
        ));
    }
}

我如何告诉 Symfony2 在登录操作期间按照我需要的方式检查密码? (目前正在执行encode(password,salt)而不是salt.encode(password,salt)


为了简单起见:您必须创建并添加一个新的Service http://symfony.com/doc/2.0/book/service_container.html,将其添加到您的捆绑包中并指定User类会使用它。首先你必须实施你的自己的密码编码器:

namespace Acme\TestBundle\Service;

use Symfony\Component\Security\Core\Encoder\PasswordEncoderInterface;

class Sha256Salted implements PasswordEncoderInterface
{

    public function encodePassword($raw, $salt)
    {
        return hash('sha256', $salt . $raw); // Custom function for password encrypt
    }

    public function isPasswordValid($encoded, $raw, $salt)
    {
        return $encoded === $this->encodePassword($raw, $salt);
    }

}

然后您将添加服务定义并且您想要指定使用您的自定义编码器为班级User. In TestBundle/Resources/config/services.yml您添加自定义编码器:

services:
    sha256salted_encoder:
        class: Acme\TestBundle\Service\Sha256Salted

and in 应用程序/配置/security.yml因此,您可以将自定义类指定为默认编码器(例如Acme\TestBundle\Entity\User class):

 encoders:
   Acme\TestBundle\Entity\User:
     id: acme.test.sha256salted_encoder

当然,盐在密码加密中起着核心作用。盐是唯一的,并为每个用户存储。班上User可以使用 YAML 注释自动生成(表当然应该包含用户名、密码、盐等字段)并且应该实现UserInterface.

最后,当您必须创建新的时,您可以使用它(控制器代码)Acme\TestBundle\Entity\User:

// Add a new User
$user = new User();
$user->setUsername = 'username';
$user->setSalt(uniqid(mt_rand())); // Unique salt for user

// Set encrypted password
$encoder = $this->container->get('acme.test.sha256salted_encoder')
  ->getEncoder($user);
$password = $encoder->encodePassword('MyPass', $user->getSalt());
$user->setPassword($password);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony2 创建自己的编码器来存储密码 的相关文章

随机推荐

  • glBitmap 问题

    我正在使用一些遗留代码来工作 它使用 glBitmap 调用来绘制位图图标 我的问题是 一旦你一次绘制大约 1000 个图标 它就会变得相当慢 它会减慢到大约 1 到 2 秒的刷新率 我想看看是否可以让它更快 首先我应该描述当前代码是如何工
  • 长度为 k 的非重叠子串的随机采样

    给定一个长度的字符串n 我将如何 伪 随机采样m大小子串k这样采样的子串就不会重叠 我的大部分脚本编写经验都是使用 Perl 但任何通用语言的易于运行的解决方案就足够了 如果输入中不能出现某个字符 例如X just my size 20 m
  • 如何删除损坏的图像框?

    我正在尝试构建一个电子邮件模板 其中我必须向不同的邮件客户端 例如 Outlook thunderbird 显示一些图像 现在的问题是 当这些客户端不允许显示图像时 会显示我不想显示的损坏的图像框 我也参考过 参考链接1 https i s
  • 如何将嵌套字典转换为带有键顺序的列表

    我想从嵌套字典中创建一个列表 Name 20 Paul Merrill 21 Brynne S Barr Phone 20 1 313 739 3854 21 939 4818 Address 20 916 8087 Vehicula Rd
  • 调用未定义的方法 mysqli_result::fetch()

    我能够从中获取数据get result 使用任何fetch assoc fetch all 和fetch row 但是当我尝试使用简单的fetch 只是 我收到这个错误 未捕获的错误 调用未定义的方法 mysqli result fetch
  • 应用部分比 Monad 部分可以更好优化的 monad 示例

    在一次讨论中我听说Applicative一些解析器的接口的实现方式不同 但比它们的更有效Monad界面 原因是与Applicative在运行整个有效计算之前 我们提前知道所有 效果 对于 monad 效果可能取决于计算期间的值 因此这种优化
  • Apache Beam:DoFn 与 PTransform

    Both DoFn and PTransform是一种定义操作的方法PCollection 我们如何知道何时使用哪个 理解它的一个简单方法是类比map f 对于列表 高阶函数map将函数应用于列表的每个元素 返回结果的新列表 您可以将其称为
  • 每n秒运行某些代码[重复]

    这个问题在这里已经有答案了 有没有办法 例如打印Hello World 每n秒 例如 程序会执行我拥有的任何代码 然后一旦过了 5 秒 time sleep 它将执行该代码 我会用它来更新文件 而不是打印 Hello World 例如 st
  • 在 SQL Server 2005 存储过程中使用 .NET Framework 3.5

    我有一个 SQL Server 2005 服务器 我想在其上运行 Net CLR 存储过程 但是 我想使用 NET Framework 3 5 如果我现在尝试这个 我会收到以下错误 Error Assembly system core ve
  • 在 C++ 程序中包含 C 头文件

    我有一个 C 程序 cpp 在其中我希望使用 C 头文件中存在的一些函数 例如 stdio h conio h stdlib h graphics h devices h 等 我可以将 stdio h 库包含在我的 cpp 文件中 如下所示
  • 冲突:被其他getUpdates请求终止;确保只有一个机器人实例正在运行

    有人遇到这样的错误吗 我该如何修复它们 2021 11 07 08 29 38 643 telegram ext updater ERROR Error while getting Updates Conflict terminated b
  • 如何在角度指令中绑定布尔值?

    我想将一些布尔属性绑定 设置到指令 但我真的不知道如何做到这一点并实现以下行为 想象一下 我想为结构设置一个标志 假设列表是否可折叠 我有以下 HTML 代码
  • 源操作数和目标操作数是否需要相同大小?

    我刚刚尝试了这个问题 要求你解释一下代码行有什么问题 movl eax rdx 解决方案表明目标操作数的大小错误 仅当从较大尺寸变为较小尺寸时才 非法 还是源操作数和目标操作数对于所有指令 或至少 mov 类类型 必须具有相同的尺寸 是的
  • POV-Ray:在脚本中设置输出分辨率或宽度/高度比

    我有一个代码可以生成一堆 pov使用 POV Ray 进行可视化的文件 不幸的是 它们具有不同的纵横比 宽度 高度 该信息以向上 向右向量的形式存在于脚本中 但是 当我渲染没有任何额外参数的脚本时 即通过povray test pov PO
  • 如何在初始化数据库时显示启动屏幕?

    我创建了一个启动画面 效果非常好 现在我想在显示启动屏幕的同时加载数据库 并在数据库完全加载后显示应用程序 UI 我有以下代码来执行此操作 对吗 public class Splash extends Activity Override p
  • 从 MySQL 中的字符串中删除引号和逗号

    我正在从一个导入一些数据CSV文件 以及大于的数字1000变成1 100 etc 有什么好方法可以从中删除引号和逗号 以便我可以将其放入int field Edit 数据实际上已经在 MySQL 表中 所以我需要能够使用 SQL 来完成此操
  • JavaScript 正则表达式 - g 修饰符不起作用[重复]

    这个问题在这里已经有答案了 我有以下代码 var str 4 shnitzel 5 ducks var rgx new RegExp 0 9 g console log rgx exec str chrome 和 firefox 上的输出是
  • 如果Bokeh有很多图表,输出文件很重并且系统很慢

    我使用散景 我非常喜欢Bokeh 因为Bokeh有很多图表并且输出文件非常简单 我在半导体公司工作 有时我会分析半导体 数据 我有很多数据 我制作了很多图表 可能是 1000 4000 次图表操作 我用Bokeh来制作图表 但是Bokeh很
  • 在 PowerShell 中检查路径是否存在的更好方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 PowerShell 中是否有更简洁且不易出错的方法来检查路径是否不存在 对于这样一个常见的用例来说 客观上来说太冗长了 if not Test
  • Symfony2 创建自己的编码器来存储密码

    我是 Symfony2 的新手 我可能有一个关于在数据库中编码用户密码的简单问题 我想以这种方式编码并存储在数据库中我的用户密码 encoded password salt sha1 salt raw password 我找到了各种编码器