2016-09-18 67 views
4

我目前正在尝试从Laravel 5.2更新到5.3。但是现在我遇到了将加密从MCrypt转换为OpenSSL的问题,如升级指南https://laravel.com/docs/5.3/upgrade#upgrade-5.3.0中所述。为此,我按照上面的文档中的建议写了一条命令。但有一个错误:从Laravel 5.2迁移加密密钥到5.3

[2016-09-18 11:07:46] local.ERROR: exception 'Illuminate\Contracts\Encryption\DecryptException' with message 'The payload is invalid.' in /home/vagrant/Code/bob/vendor/laravel/legacy-encrypter/src/BaseEncrypter.php:44 

命令:

<?php 
namespace App\Console\Commands; 

use App\User; 
use Illuminate\Console\Command; 
use Laravel\LegacyEncrypter\McryptEncrypter; 

class McryptToOpenSSL extends Command 
{ 
/** 
* The name and signature of the console command. 
* 
* @var string 
*/ 
protected $signature = 'key:migrate'; 

/** 
* The console command description. 
* 
* @var string 
*/ 
protected $description = 'Migrates key from deprecated Mcrypt to OpenSSL.'; 

/** 
* Create a new command instance. 
* 
* @return void 
*/ 
public function __construct() 
{ 
    parent::__construct(); 
} 

/** 
* Execute the console command. 
* 
* @return mixed 
*/ 
public function handle() 
{ 
    $legacy = new McryptEncrypter(env('APP_KEY_LEGACY')); 
    $users = User::all(); 
    foreach ($users as $user) { 
     $user->password = encrypt(
      $legacy->decrypt($user->password) 
     ); 

     $user->save(); 
    } 
} 
} 

.ENV(按键有稍微改变出于安全原因)

APP_ENV=local 
APP_DEBUG=true 
APP_KEY=base64:3VU8u79ZU0dObazwvd2lHHOAVRJjy5kvzXKeKtcHVYk= 
APP_KEY_LEGACY=zejqrdy7WjA58xGoSuj634RYXB97vLyp 

回答

0

你手动覆盖用户的密码加密? 默认情况下,如果您不更改任何内容,则不需要执行密码迁移。 密码未使用encrypt()进行加密,而是使用password_hash(), ,这就是有效负载无效的原因。