passwords - FOSUserBundle:自定义密码/从旧数据库结构迁移

标签 passwords symfony md5 database-migration fosuserbundle

我想转向 Symfony2,因为它的现代性和良好的编程给我留下了深刻的印象。

现在我正在从我的旧系统中获取一个用户表,其中有 10,000 个用户,我不想让他们设置新密码来激怒他们......所以我希望他们能够使用他们的密码登录旧密码

下面是我的用户表的伪代码,其中包含有关登录/注册的 3 个主要字段:

id, int(10) unsigned NOT NULL
username varchar(40) NOT NULL
passhash varchar(32) NOT NULL
secret varchar(20) NOT NULL

注册时,数据以这种方式生成:

$secret = mksecret ();
$passhash = md5 ($secret . $password_formfield . $secret);

登录时,通过以下方式检查数据:

if ($row['passhash'] != md5 ($row['secret'] . $password_formfield . $row['secret']))
{
//show login error
}

那么我如何在 FOSUserBundle 中最好地处理它,而不必编辑太多文件?

最佳答案

您需要创建一个自定义密码编码器:

<?php

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

class MyPasswordEncoder extends BasePasswordEncoder
{
    public function encodePassword($raw, $salt)
    {
        return md5($salt.$raw.$salt);
    }

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

并在security.yml中配置它:

services:
    my_password_encoder:
        class: MyPasswordEncoder

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: { id: my_password_encoder }

只要User::getSalt()返回secret并且User::getPassword()返回passhash 你应该可以走了。

关于passwords - FOSUserBundle:自定义密码/从旧数据库结构迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8771655/

相关文章:

javascript - 在 Symfony2 表单小部件中包含 Javascript

php - Symfony2 - 更改现有用户的编码器

iOS : how to launch app automatically

javascript - 密码中允许使用多个特殊字符

symfony - 如果 "framework.test"配置未设置为 true,则无法创建用于功能测试的客户端

forms - Symfony 2基本GET表单生成的URL

php - md5密码找回

mysql - 从数据库恢复后 MD5 密码哈希不匹配

java - MessageDigest 摘要() 方法

jsf - p :password doesn't redisplay prefilled model value