0

古い symfony システムの user テーブルには次の列があります:

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新しいユーザーのパスワードを同じ方法でハッシュする必要があります。


ハッシュメソッドを実装する方法:

フォルダー名librariesにライブラリーをappに作成してから、 ServiceProviderを作成します。

libraries\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 のクラスマップを自動ロードします。

Symfony がハッシュを作成する方法がわからないので、必要に応じて Symfony がハッシュを作成し、それを実装する方法を検索する必要があります。

于 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 に答える