流明微框架=> php artisan key:generate


72

我正在尝试PHP Micro Framework Lumen(来自Laravel)。

我的第一步之一就是调查.env.example文件并制作一个副本以得到我的.env文件。就像Laravel中一样,有一个变量APP_KEY。现在,我尝试了简单的命令php artisan key:generate来获取新密钥,但遇到以下错误消息:

[InvalidArgumentException]在“键”名称空间中没有定义任何命令。

有人知道我如何为流明生成密钥吗?

更新解决方案

因此,我找到了我最喜欢的解决方案。在命令行(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个字符的随机字符串:)


1
使用像md5这样的快速哈希函数不会增加熵,并且uniqid是“随机”的低熵源。请使用@lukasgeiter提供的解决方案str_random从加密安全的随机数生成器中提取字节。
Michael Cordingley '18

Answers:


125

Laravel命令非常简单。它只是生成一个随机的32个字符长的字符串。您可以在流明做同样的事情。只需临时添加一条路线,如下所示:

$router->get('/key', function() {
    return \Illuminate\Support\Str::random(32);
});

然后转到/key浏览器,然后将密钥复制粘贴到.env文件中。
然后删除路由。

显然,您也可以在线使用一些随机字符串生成器。像这个


1
好的解决方案:)但是我确实在寻找一种方法来实现“ laravel / lumen”方式;)
Thomas Venturini

3
空无一人。流明必须轻巧,因此开发人员应负责生成密钥……
lukasgeiter 2015年

优雅的解决方案!
wchopite

2
在最新版本中,$ app更改为$ router。休息是正确的。
Manish Shukla,

小改进if (!app()->environment('prod')) $router->get('/key', function() { return 'APP_KEY=base64:'. base64_encode(\Illuminate\Support\Str::random(32)); });
8ctopus

38

首先,你必须注册你的密钥生成器的命令,把这个流明密钥发生器命令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

编辑

您可以使用流明发生器。它涵盖了您在Laravel中缺少的许多命令。


2
我会回答这个问题,它是laravel实现,它教了您一些有关控制台命令的结构以及它们在应用程序上下文中的位置的信息。潜入它真的很酷:D
Etienne Marais

2
不错的解决方案!感谢分享。一件事:我将使用KeyGenerateCommand $commands
:::

1
如果密钥为空,这将无法工作。使用此替换键:str_replace函数( 'APP_KEY =' ENV( 'APP_KEY'), 'APP_KEY =' $键,的file_get_contents($路径)。)

在流明中,我得到以下错误:There are no commands defined in the "key" namespace.
Pathros

出现错误“在“键”名称空间中没有定义命令。
Kamlesh '02

28

一个简单的解决方案是从终端运行PHP代码(不使用tinker,因为Lumen不可用):

php -r "require 'vendor/autoload.php'; echo str_random(32).PHP_EOL;"

它使用Str::random()利用安全random_bytes()功能的Laravel函数。


5
具有流明> = 5.4的base64encoded输出的Oneliner:php -r "require 'vendor/autoload.php'; echo base64_encode(str_random(32)).PHP_EOL;"

16

对我而言,生成流明键的最简单方法是在控制台上键入以下命令之一:

date | md5
date | md5sum

要么

openssl rand -base64 24

取决于您的环境。就我而言,我不在date | md5Mac上使用


不要忘记对Lumen> 5.4的md5键进行base64编码,例如。php -r "echo base64_encode(\"[YOUR-MD5-STRING]\");"-它添加前缀base64:在你的.env文件..
4levels

11

APP_KEY的生成是开发过程的一步(我不认为临时创建路由是一种可行的方法)。该功能str_random可以为我们提供帮助,但是此功能是Laravel / Lunmen框架的一部分。我建议运行修补匠

php artisan tinker

然后运行功能

>>> str_random(32)

结果就是您要寻找的钥匙。

=> "y3DLxnEczGWGN4CKUdk1S5GbMumU2dfH"


但是,要使修补程序与流明一起工作,您还需要添加它。 github.com/laravel/framework/issues/8566
Leo Fisher

3
是的,最后我发现自己date | md5sum在终端上使用了并将结果粘贴到.env
Cosmitar,2016年

感谢您的回答Cosmitar
Ishmael

在流明中,出现以下错误:Command "tinker" is not defined.。但是然后我进入了Laravel项目文件夹,它确实起作用了!我复制了字符串,然后回到Lumen文件夹。
Pathros

11

只需使用PHP CLI。从本地或远程命令行运行此命令,以生成一个随机的32个字符的流明APP_KEY:

php -r "echo bin2hex(random_bytes(16));"

输出:bae48aba23b3e4395b7f1b484dd25192

在Mac和Windows上可与PHP 7.x一起使用。


5

要生成密钥并使用laravel命令,您需要安装一个软件包。详细信息如下:

  1. 您必须安装软件包 composer require flipbox/lumen-generator
  2. 您必须添加$app->register(Flipbox\LumenGenerator\LumenGeneratorServiceProvider::class);bootstrap/app.php文件中。

链接:https//github.com/flipboxstudio/lumen-generator


2

我使用了以下命令:

php -r \"copy('.env.example', '.env');\"

php -r "echo password_hash(uniqid(), PASSWORD_BCRYPT).\"\n\";"

该命令生成类似于以下内容的密钥:

$ 2y $ 10 $ jb3kw / vUANyzZ4ncMa4rwuR09qldQ2OjX8PGrVB5dIlSnUAPCGjFe


2

我在mac上做的所有事情都是在终端中执行以下命令:

date | md5 | pbcopy

这会将值复制到剪贴板,因此您可以轻松地将密钥粘贴到.env文件中。


1

php -a以启动交互式php游乐场。

然后跑 echo substr(md5(rand()), 0, 32);以生成32个字符串。

然后,您可以复制/粘贴到.env文件中。


0

这个答案的灵感来自@ thomas-venturini对问题的更新。这是一个bash脚本,负责使用上述PHP命令和UNIX命令来创建.env和更新它:APP_KEYsed

#!/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

希望有人觉得这有用。


0

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=

您也可以通过直接.env使用PHP添加密钥来删除第三步。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.