【问题标题】:Laravel middleware throw a "No supported encrypter found" messageLaravel 中间件抛出“未找到支持的加密器”消息
【发布时间】:2016-06-17 06:47:04
【问题描述】:

在 laravel 5.2 中 简单地说,这段代码效果更好:

Route::get('/', function () {
if(Auth::guest())
{
    return Redirect::to('login');
}
else
{
    return view('index');   
}

});

并且此代码不起作用并抛出“未找到支持的加密器。密码和/或密钥长度无效。”的消息。

Route::group(['middleware' => ['web']], function () {
//

Route::get('/',function(){
    return view('index');
})->middleware('auth');
});

即使我测试了 laravel 的默认工匠 make:auth,它仍然显示相同的消息。 我认为这不是关键,因为我可以使用第一种方法登录但不能使用中间件。 帮助...

更新: 密钥在 .env 文件和 config/app.php 文件中是相同的 32 字符密钥,并且 'cipher' => 'AES-256-CBC'

更新 2
在帮助并检查了 Illuminate/Encryption/EncryptionServiceProvider.php 之后,我发现:

$config = $app->make('config')->get('app');
$key = $config['key'];
$cipher = $config['cipher'];

当我尝试回显 $cipher 值时,我发现它是“AES-256-CBC”,就像在配置文件中一样,但 $key 变量为空。那为什么它不从配置文件或.env文件中读取密钥???

【问题讨论】:

  • 在您的 .env 文件中,您是否设置了 APP_KEY 变量?
  • 是的,.env 文件和 config/app.php 文件中的相同的 32 个字符密钥,以及 'cipher' => 'AES-256-CBC'
  • phpinfo() 创建一个页面,你看到mcrypt 部分了吗?
  • 已启用 mcrypt 支持 mcrypt_filter 已启用
  • Illuminate\Encryption\EncryptionServiceProvider 中尝试dd 使用$key$cipher 变量并确保它们符合您的预期。

标签: php laravel ubuntu encryption laravel-artisan


【解决方案1】:

在 App.php 文件中有这样的内容:

'key' => env('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')

应该是

'key' => env('APP_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')

'key' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

【讨论】:

  • 或 'key' => env('APP_KEY') 。这样它将从 .env 中获取值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
  • 2016-06-11
  • 2016-03-20
  • 2018-06-18
相关资源
最近更新 更多