Laravel 5应用密钥

90

我对Laravel还很陌生。今晚我刚开始接触它。实际上,我有以下代码:

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

xampp/htdocs/laravel/blog/config/app.php 中。
我想通过命令行将此密钥更改为32位,如下所示:

xampp\htdocs\laravel/blog>php artisan key:generate 

它生成了密钥,但无法在xampp/htdocs/laravel/blog/config/app.php中替换/更新。


你是否已经准备好了 .env 文件?如果是的话,请检查其中是否有一个密钥。 - Juan Carlos Brown
@Juan Carlos Brown 我已经从那里获取了,谢谢。 - Raham
我添加了一个新的答案,强调用户密码的重要性。 - prosti
5个回答

114
在您的 app.php 文件中,'key' => env('APP_KEY', 'SomeRandomString') 这一行代码的意思是:您的应用程序的密钥可以在您的 .env 文件的 APP_KEY 行中找到。
基本上,它告诉 Laravel 首先在 .env 文件中查找密钥,如果那里没有找到,则使用 'SomeRandomString'
当您使用 php artisan key:generate 时,它会将新的密钥生成到您的 .env 文件中,而不是生成到 app.php 文件中。
正如 kotapeter 所说,您的 .env 文件将位于您的 Laravel 根目录中,并且可能会被隐藏;xampp/htdocs/laravel/blog

102

你可以通过以下命令生成一个key

php artisan key:generate 

密钥将自动写入您的.env文件中。

APP_KEY=YOUR_GENERATED_KEY
如果您想在生成后查看您的key,请使用--show选项。
php artisan key:generate --show

注意:在您的项目文件夹中,.env是一个隐藏文件。

在此输入图片描述


2
如果您已经有默认的空行APP_KEY,则在运行命令时,该行将自动更新。 - Andrew

45

如果您只想打印密钥(而不是写入.env文件),则可以使用以下选项:

php artisan key:generate --show

这应该是默认设置吗?否则,当您键入php artisan key:generate时,不会在您的(希望是开发)计算机中破坏密码吗?也就是说,我们需要php artisan key:generate --write。 - Tom Andersen
1
@TomAndersen 不,APP_KEY仅用于加密(因此,默认情况下为cookie),而不用于密码哈希。我认为https://tighten.co/blog/app-key-and-you是一个很好的解释。 - Charles Wood

1
对我来说,问题在于我还没有运行composer update来更新这个新的项目/分支。命令默默地失败了,什么也没发生。
在运行composer update之后,它就可以工作了。

2
你可能是想要运行 composer install。在一个新的项目分支上,除非你真的想要更新依赖项,否则不应该立即运行 composer update - Dan Abrey

1

从这一行开始

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

APP_KEY 是一个全局环境变量,存在于 .env 文件中。

如果需要,您可以替换应用程序密钥。

php artisan key:generate

命令。这将始终生成新的密钥。

输出可能会像这样:


Application key [Idgz1PE3zO9iNc0E3oeH3CHDPX9MzZe3] set successfully.

Application key [base64:uynE8re8ybt2wabaBjqMwQvLczKlDSQJHCepqxmGffE=] set successfully.

在 Laravel 5.4 中,Base64 编码应该是默认设置。

请注意,在您第一次创建 Laravel 应用程序时,key:generate 将自动调用。

如果您更改密钥,请注意使用 Hash::make() 保存的密码将不再有效。


6
如果您更改密钥,请注意使用Hash::make()保存的密码将不再有效。这是我也曾经想过的事情,我在互联网上也经常看到类似的说法。然而,如果您查看https://github.com/laravel/framework/blob/5.5/src/Illuminate/Hashing/HashServiceProvider.php和https://github.com/laravel/framework/blob/5.5/src/Illuminate/Hashing/BcryptHasher.php以及此代码的过去版本,您会发现应用程序密钥并未用于对哈希进行盐值处理或用于其他任何目的。我试图更改应用程序密钥,正如代码所建议的那样,我的密码仍然能够正确检验。 - Leif
2
应用密钥用于加密会话数据,而不是密码,这在文档中有所提及。此外,至少根据我的理解,它假设了对称可解密加密。 - Sergey Neskhodovskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接