Lumen Micro Framework => php artisan key:generate
Posted
技术标签:
【中文标题】Lumen Micro Framework => php artisan key:generate【英文标题】: 【发布时间】:2015-08-01 08:58:47 【问题描述】:我正在试用 php 微框架 Lumen(来自 Laravel)。
我的第一步是查看.env.example
文件并复制它以获得我的.env
文件。有一个变量 APP_KEY 就像在 Laravel 中一样。现在我尝试了简单的命令php artisan key:generate
来获取我的新密钥但是我遇到了以下错误消息:
[InvalidArgumentException] “key”中没有定义命令 命名空间。
有人知道我如何为 Lumen 生成密钥吗?
更新解决方案
所以我找到了我最喜欢的解决这个问题的方法。在命令行 (Linux) 上,我运行 php -r "echo md5(uniqid()).\"\n\";"
这给了我类似 7142720170cef01171fd4af26ef17c93
的东西。
如果您要更频繁地使用 Lumen,您可能需要在您的 .bashrc
中创建一个别名,该别名位于您的主目录 /home/USERNAME
中。为此,您可以使用nano ~/.bashrc
或vi ~/.bashrc
打开文件,并在文件末尾复制以下别名alias phpkey='php -r "echo md5(uniqid()).\"\n\";"'
。现在你可以使用命令phpkey
,它会给你一个32个字符长的随机字符串:)
【问题讨论】:
使用快速散列函数,如 md5,不会增加熵,uniqid
是“随机性”的低熵源。请使用@lukasgeiter 提供的解决方案,因为str_random
从加密安全的随机数生成器中提取字节。
【参考方案1】:
Laravel 命令相当简单。它只是生成一个随机的 32 个字符长的字符串。你可以在 Lumen 中做同样的事情。只是临时添加这样的路线:
$router->get('/key', function()
return \Illuminate\Support\Str::random(32);
);
然后在浏览器中转到 /key
并将密钥复制粘贴到您的 .env
文件中。
然后删除路线。
显然你也可以在线使用一些随机字符串生成器。 Like this one
【讨论】:
不错的解决方案 :) 但我真的在寻找一种方法来做到这一点“laravel/lumen”的方式;) 没有。流明需要很轻,所以由开发人员来做诸如生成密钥之类的事情...... 优雅的解决方案! 在最近的版本中,$app 改为 $router。休息是正确的。 小改进if (!app()->environment('prod')) $router->get('/key', function() return 'APP_KEY=base64:'. base64_encode(\Illuminate\Support\Str::random(32)); );
【参考方案2】:
首先,您必须注册您的密钥生成器命令,将此Lumen Key Generator Commands 放入app/Console/Commands/KeyGenerateCommand.php
。要使此命令在artisan
中可用,请更改app\Console\Kernel.php
:
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
'App\Console\Commands\KeyGenerateCommand',
];
之后,配置您的应用程序,使Illuminate\Config\Repository
实例具有app.key
值。为此,请更改bootstrap/app.php
:
<?php
require_once __DIR__.'/../vendor/autoload.php';
Dotenv::load(__DIR__.'/../');
/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| Here we will load the environment and create the application instance
| that serves as the central piece of this framework. We'll use this
| application as an "IoC" container and router for this framework.
|
*/
$app = new Laravel\Lumen\Application(
realpath(__DIR__.'/../')
);
$app->configure('app');
之后,将您的.env.example
文件复制到.env
:
cp .env.example .env
如果您已经使用
.env
文件,请忽略此步骤。
享受你key:generate
命令通过:
php artisan key:generate
编辑
您可以使用Lumen Generator。它涵盖了您在 Laravel 中缺少的许多命令。
【讨论】:
我会选择这个答案,它是 laravel 实现,它教你一些关于控制台命令的结构以及它们在你的应用程序上下文中的位置。一旦你潜入它真的很酷:D 不错的解决方案!感谢分享。一件小事:我会使用 KeyGenerateCommand::class 而不是$commands
中的硬编码类名;)
如果 key 为空,这将不起作用。使用它来替换密钥:str_replace('APP_KEY='.env('APP_KEY'), 'APP_KEY='.$key, file_get_contents($path))
在 Lumen 中出现以下错误:There are no commands defined in the "key" namespace.
出现错误'“key”命名空间中没有定义命令。'【参考方案3】:
一个简单的解决方案是从终端运行 PHP 代码(不使用 tinker
,因为 Lumen 不提供):
php -r "require 'vendor/autoload.php'; echo str_random(32).PHP_EOL;"
它使用了 Laravel 的 Str::random()
函数,该函数利用了安全的 random_bytes()
函数。
【讨论】:
具有 base64 编码输出的流明 >= 5.4 的 Oneliner:php -r "require 'vendor/autoload.php'; echo base64_encode(str_random(32)).PHP_EOL;"
【参考方案4】:
只需使用 PHP CLI。从本地或远程命令行运行此命令以生成随机的 32 字符 Lumen APP_KEY:
php -r "echo bin2hex(random_bytes(16));"
输出:bae48aba23b3e4395b7f1b484dd25192
适用于 Mac 和 Windows 上的 PHP 7.x。
【讨论】:
【参考方案5】:对我来说,生成 Lumen 密钥的最简单方法是在控制台上键入以下命令之一:
date | md5
date | md5sum
或
openssl rand -base64 24
取决于您的环境。就我而言,我不在 mac 上使用date | md5
【讨论】:
不要忘记对 Lumen > 5.4 的 md5 密钥进行 base64 编码,例如。php -r "echo base64_encode(\"[YOUR-MD5-STRING]\");"
- 在你的 .env
文件中添加前缀 base64:
..【参考方案6】:
APP_KEY 生成是开发过程的一个步骤(我不认为创建临时路由是一种实用的方法)。 str_random
函数可以帮助我们,但是这个函数是 Laravel/Lunmen 框架的一部分。
我建议运行修补程序
php artisan tinker
然后运行函数
>>> str_random(32)
结果就是你要找的钥匙。
=> "y3DLxnEczGWGN4CKUdk1S5GbMumU2dfH"
【讨论】:
但要让修补程序与 Lumen 一起工作,您需要添加它。 github.com/laravel/framework/issues/8566 是的,最后我发现自己在终端上使用date | md5sum
并将结果粘贴到 .env 中
感谢Cosmitar的回答
在 Lumen 中出现以下错误:Command "tinker" is not defined.
。但后来我去了一个 Laravel 项目文件夹,它确实有效!我复制了字符串,然后回到 Lumen 文件夹。【参考方案7】:
要生成密钥并使用 laravel 命令,您需要安装一个包。详情如下:
-
你必须安装包
composer require flipbox/lumen-generator
您必须将$app->register(Flipbox\LumenGenerator\LumenGeneratorServiceProvider::class);
添加到bootstrap/app.php
文件中。
链接:https://github.com/flipboxstudio/lumen-generator
【讨论】:
【参考方案8】:我使用过这些命令:
php -r \"copy('.env.example', '.env');\"
php -r "echo password_hash(uniqid(), PASSWORD_BCRYPT).\"\n\";"
该命令生成一个类似这样的密钥:
$2y$10$jb3kw/vUANyzZ4ncMa4rwuR09qldQ2OjX8PGrVB5dIlSnUAPCGjFe
【讨论】:
【参考方案9】:我在 mac 上所做的就是在终端中执行这个命令:
date | md5 | pbcopy
这会将值复制到剪贴板,因此您可以轻松地将密钥粘贴到 .env
文件中。
【讨论】:
【参考方案10】:运行php -a
启动交互式php Playground。
然后运行echo substr(md5(rand()), 0, 32);
生成一个32个字符的字符串。
然后您可以复制/粘贴到.env
文件中。
【讨论】:
【参考方案11】:这个答案的灵感来自@thomas-venturini 对问题的更新。这是一个 bash 脚本,它负责创建 .env
并使用上述 PHP 命令和 UNIX sed
命令将其更新为 APP_KEY
:
#!/usr/bin/env bash
function generate_app_key
php -r "echo md5(uniqid()).\"\n\";"
APP_KEY=$(generate_app_key)
sed -e s/APP_KEY=.*$/APP_KEY=$APP_KEY/g .env.example > .env
希望有人觉得这很有用。
【讨论】:
【参考方案12】:1.打开你的终端设置文件:
vim ~/.zshrc
2.为生成随机字符串创建别名:
# Lumen Key Generate
alias lumen-key="php -r \"require 'vendor/autoload.php'; echo base64_encode(str_random(32)).PHP_EOL;\""
3. 随时获取密钥:
~/your-lumen-project via ? v7.3.0
➜ lumen-key
VkxTYWZZSnhVNVEzRThXelBGZVJDVGZVYTNTcm9peHY=
您也可以通过使用PHP直接在
.env
中添加密钥来删除第三步。
【讨论】:
【参考方案13】:[翻转框\流明生成器]
修复错误:没有定义命令...
[boostrap/app] 检查是否在 return $app 后注册了 Flipbox\LumenGenerator。如果是这样,请在返回应用程序之前移动服务提供商注册...
/**
* Configure extra LARAVEL commands to a lumen app
* Check avaliable commands in git: flipboxstudio lumen-generator
*/
if($app->environment() !== 'production')
$app->register(Flipbox\LumenGenerator\LumenGeneratorServiceProvider::class);
return $app;
流明 8.0 / 翻转盒/流明发生器 8.2
【讨论】:
【参考方案14】:100% 有效
只需安装flipbox/lumen-generator 包
composer require flipbox/lumen-generator
.
在您的 bootstrap/app.php 文件中,添加:
$app->register(Flipbox\LumenGenerator\LumenGeneratorServiceProvider::class);
然后在你可以运行 php artisan 命令之后, 更多信息:https://github.com/flipboxstudio/lumen-generator
【讨论】:
以上是关于Lumen Micro Framework => php artisan key:generate的主要内容,如果未能解决你的问题,请参考以下文章