start - Lumen Micro Framework=> clave artesanal php: generar
php lumen start (12)
Estoy probando el PHP Micro Framework Lumen (de Laravel).
Uno de mis primeros pasos fue buscar en el archivo
.env.example
y hacer una copia para tener mi archivo
.env
.
Hay una variable APP_KEY tal como la hay en Laravel.
Ahora probé el comando simple
php artisan key:generate
para obtener mi nueva clave Pero me encontré con el siguiente mensaje de error:
[InvalidArgumentException] No hay comandos definidos en el espacio de nombres "clave".
¿Alguien sabe cómo puedo generar claves para Lumen?
Actualización con solución
Entonces encontré mi solución favorita para este problema.
En la línea de comando (Linux) ejecuto
php -r "echo md5(uniqid())./"/n/";"
lo que me da algo como esto
7142720170cef01171fd4af26ef17c93
.
Si va a usar Lumen con más frecuencia, puede crear un alias en su
.bashrc
, que se encuentra en su directorio personal
/home/USERNAME
.
Para hacerlo, puede abrir el archivo con
nano ~/.bashrc
o
vi ~/.bashrc
y copiar el siguiente alias al final del archivo,
alias phpkey=''php -r "echo md5(uniqid())./"/n/";"''
.
Ahora puede usar el comando
phpkey
que le dará una cadena aleatoria de 32 caracteres de longitud :)
1.Abra el archivo de configuración de su terminal:
vim ~/.zshrc
2.Cree un alias para generar cadenas aleatorias:
# Lumen Key Generate
alias lumen-key="php -r /"require ''vendor/autoload.php''; echo base64_encode(str_random(32)).PHP_EOL;/""
3. Obtenga una clave cuando lo necesite:
~/your-lumen-project via 🐘 v7.3.0
➜ lumen-key
VkxTYWZZSnhVNVEzRThXelBGZVJDVGZVYTNTcm9peHY=
También puede eliminar el tercer paso agregando la clave directamente en
.env
usando PHP.
Ejecute
php -a
para iniciar php playground interactivo.
Luego ejecute
echo substr(md5(rand()), 0, 32);
para generar una cadena de 32 caracteres.
Luego puede copiar / pegar en el archivo
.env
.
El comando Laravel es bastante simple. Simplemente genera una cadena aleatoria de 32 caracteres. Puedes hacer lo mismo en Lumen. Solo agrega temporalmente una ruta como esta:
$router->get(''/key'', function() {
return str_random(32);
});
Luego vaya a
/key
en su navegador y copie y pegue la clave en su archivo
.env
.
Luego elimine la ruta.
Obviamente, también podría usar un generador de cadenas al azar en línea. Como éste
En primer lugar, debe registrar su
comando de generador de claves
, coloque estos
comandos de generador de claves de Lumen
en
app/Console/Commands/KeyGenerateCommand.php
.
Para que este comando esté disponible en
artisan
, cambie
app/Console/Kernel.php
:
/**
* The Artisan commands provided by your application.
*
* @var array
*/
protected $commands = [
''App/Console/Commands/KeyGenerateCommand'',
];
Después de eso, configure su aplicación para que la instancia
Illuminate/Config/Repository
tenga el valor
app.key
.
Para hacer esto, cambie
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'');
Después de eso, copie su archivo
.env
a
.env
:
cp .env.example .env
Ignore este paso si ya usa el archivo
.env
.
Disfruta tu
key:generate
comando a través de:
php artisan key:generate
Editar
Puede usar Lumen Generator . Cubre tantos comandos que te faltan en Laravel.
Esta respuesta fue inspirada por la actualización de @ thomas-venturini a la pregunta.
Aquí hay un script bash que se encarga de crear
.env
y actualizarlo con una
APP_KEY
utilizando el comando PHP mencionado anteriormente y el comando
sed
UNIX:
#!/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
Espero que alguien encuentre esto útil.
He usado estos comandos:
php -r /"copy(''.env.example'', ''.env'');/"
php -r "echo password_hash(uniqid(), PASSWORD_BCRYPT)./"/n/";"
El comando genera una clave similar a esta:
$ 2a $ 10 $ jb3kw / vUANyzZ4ncMa4rwuR09qldQ2OjX8PGrVB5dIlSnUAPCGjFe
La generación APP_KEY es un paso del proceso de desarrollo (no creo que crear rutas temporales sea una forma práctica de hacerlo).
La función
str_random
puede ayudarnos, pero esta función es parte del marco Laravel / Lunmen.
Recomiendo ejecutar tinker
php artisan tinker
y luego ejecuta la función
>>> str_random(32)
El resultado es la clave que estás buscando.
=> "y3DLxnEczGWGN4CKUdk1S5GbMumU2dfH"
Para generar la clave y usar el comando laravel, necesita instalar un paquete. Los detalles son los siguientes:
-
composer require flipbox/lumen-generator
instalar elcomposer require flipbox/lumen-generator
paquetescomposer require flipbox/lumen-generator
-
$app->register(Flipbox/LumenGenerator/LumenGeneratorServiceProvider::class);
agregar$app->register(Flipbox/LumenGenerator/LumenGeneratorServiceProvider::class);
en el archivobootstrap/app.php
.
Para mí, la forma más fácil de generar una clave Lumen es escribir en la consola uno de estos comandos:
date | md5
date | md5sum
o
openssl rand -base64 24
Dependiendo de su entorno.
En mi caso, siempre uso
date | md5
date | md5
en mac
Simplemente use PHP CLI. Ejecute esto desde su línea de comando local o remota para generar un Lumen APP_KEY aleatorio de 32 caracteres:
php -r "echo bin2hex(random_bytes(16));"
Salida: bae48aba23b3e4395b7f1b484dd25192
Funciona con PHP 7.x en Mac y Windows.
Todo lo que hago en mac es ejecutar este comando en la terminal:
date | md5 | pbcopy
Esto copia el valor en el portapapeles y puede pegar fácilmente la clave en el archivo
.env
.
Una solución fácil es simplemente ejecutar el código PHP desde la terminal (sin usar
tinker
, porque eso no está disponible con Lumen):
php -r "require ''vendor/autoload.php''; echo str_random(32).PHP_EOL;"
Utiliza la función
Str::random()
Laravel que utiliza la función secure
random_bytes()
.