0

旧 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 以相同格式加密我的密码的方法会有所帮助。

4

2 回答 2

6

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


如何实现哈希方法:

在文件夹名称库中创建一个库到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',然后在 composer.json 中添加'app/libraries'以自动加载类映射

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

于 2013-08-13T09:27:32.143 回答
-1

公式:
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))

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

于 2013-10-16T08:49:16.210 回答