【问题标题】:How to import md5 salt passwords from symfony to laravel 4如何将 md5 salt 密码从 symfony 导入 laravel 4
【发布时间】:2013-08-13 08:35:04
【问题描述】:

旧 symfony 系统的用户表有以下列:

email               | algorithm   | salt                              | password
--------------------+-------------+-----------------------------------+-------------
techytimo@gmail.com | sha1        | ea579e44dd150e5ba6680d6a3cee26b4  | f48598ad17acf18583d8499d7c6abc430929ae49

我用 laravel 4 创建的新系统有以下列:

email               | password
--------------------+-----------------------------------------------------------
techytimo@gmail.com | $2y$08$Zz3rVIW4qJFd5IdTfzpw3OrH0HxGO8BrBxfonIQCvU33/yWQkUAe

如何在不让用户重新注册的情况下,将旧系统中的3000个账号及其密码导入新系统?

还有一种使用 laravel 4 以相同格式加密我的密码的方法会有所帮助。

【问题讨论】:

    标签: symfony laravel md5 laravel-4 sha1


    【解决方案1】:

    一种解决方法是在 Laravel 中扩展 Auth 模块,以从 Symfony 实现您的哈希解决方案。
    重写Auth::attempt(),以您想要的方式散列您的密码,将起作用。
    Hash::X 也一样,你必须在 Auth 类中重写一个函数,以同样的方式散列新用户密码。


    如何实现哈希方法:

    libraries文件夹中创建一个库到app,然后,创建你的ServiceProvider

    库\SymfonyHasherServiceProvider.php

    use Illuminate\Support\ServiceProvider;
    
    class SymfonyHasherServiceProvider extends ServiceProvider {
    
        public function register()
        {
            $this->app->bind('hash', function()
            {
                return new SymfonyHasher;
            });
        }
    
    }
    

    然后,创建你的散列器,这将是 Symfony 散列方法的副本:

    库\SymfonyHasher.php

    class SymfonyHasher implements Illuminate\Hashing\HasherInterface {
    
        public function make($value, array $options = array())
        {
            /* make your hash here */
        }
    
        public function check($value, $hashedValue, array $options = array())
        {
            return $hashedValue == $this->make($value);
        }
    
    }
    

    app.php config中的服务提供者数组中将'Illuminate\Hashing\HashServiceProvider'替换为'SymfonyHasherServiceProvider',然后添加'app/libraries' 在 composer.json 中自动加载 classmap

    我不知道 Symfony 是如何制作散列的,所以你必须搜索 Symfony 如何制作散列并根据需要实现它。

    【讨论】:

    • 能否请你一步一步告诉我应该怎么做?
    • 非常感谢,我将不胜感激
    【解决方案2】:

    公式:
    Hash::make(encryptFunc('password'))==Hash::make(encrypted_pa​​ssword);

    在 Auth::attempt 之前,将 $userdata 设置为:

    $userdata = [
                    'username'  => Input::get('username'),
                    'password'  =>your_sha1_salt_function(Input::get('password'))
    
                    ];
    

    在你的 user.php 中

    public function getAuthPassword()
        {
    
            return Hash::make($this->password);
        }
    

    在 Auth::attempt 中将执行 Hash::check 如下: Hash::check(your_sha1_salt_function(Input::get('password')),Hash::make($this->password))

    这样,您将无需创建新的提供者并更改配置。

    【讨论】:

      猜你喜欢
      • 2010-11-09
      • 1970-01-01
      • 2014-08-01
      • 2017-04-29
      • 1970-01-01
      • 2014-01-26
      • 2019-07-11
      • 2014-03-09
      • 1970-01-01
      相关资源
      最近更新 更多