在Laravel中什么时候需要生成新的应用程序密钥?

111

由于在创建应用程序时,它会自动为我在.env文件中设置密钥,因此我不确定何时应运行它。

此外,如果第二个开发人员进来并克隆了应用程序,他/她需要运行 php artisan key:generate 吗?

我们怎样才能确切知道何时运行 php artisan key:generate ?


3
不正确。APP_KEY与哈希无关。阅读更多:https://tighten.co/blog/app-key-and-you - johnRivs
@johnRivs,你说得完全正确。四年前我还相信这个谬论。 - tino.codes
1
默认情况下,Laravel自带的PasswordBrokerManager类使用APP_KEY生成用于密码恢复邮件的哈希和验证密码。如果我没记错的话,如果你生成了新的应用密钥,所有你现有的活动密码链接将变得无效。这不是一个大问题,但需要知道。 - Andrew Larsen
3个回答

162

php artisan key:generate是一个命令,用于设置.env文件中的APP_KEY值。默认情况下,在运行composer create-project laravel/laravel命令后,会运行此命令。如果您使用像git这样的版本控制系统来管理开发项目,调用git push ...会将 Laravel 项目的副本推送到任何地方,但不会包括您的.env文件。因此,如果有人使用git clone ...克隆您的项目,则必须手动输入php artisan key:generate才能使他们的应用程序正常运行。

简而言之,唯一需要调用php artisan key:generate的时间是在预创建的 Laravel 项目的clone之后。

附注:如果您尝试使用在.env.example文件中默认为SomeRandomStringAPP_KEY运行 Laravel 项目,则实际上会出现错误:

  

未找到受支持的加密程序。 密码和/或密钥长度无效。


1
我不太相信,但这完全有可能。话虽如此,在我使用Laravel进行一年多的开发中,我没有看到任何这样的情况。 - Tim Lewis
1
我刚为那个问题添加了一个“侧记”。答案是否定的,如果没有密钥,你将无法运行该项目。 - Tim Lewis
1
@Maven97,提交您的.env文件并不是一个好主意(除非您百分之百确定其中包含的信息是安全的/您不介意其他人看到密钥/密码等),但如果您确实要这样做,那么您就不需要调用此命令。 - Tim Lewis
2
@AdemTepe 两个开发者可以使用相同的APP_KEY,这没问题,并且实际上允许在他们的两个本地数据库之间共享数据(即如果其中一个损坏了,则从另一个进行恢复应该可以正常工作)。但出于安全原因,我仍建议不要将其放在.env.example中。像AWS Secret Manager或类似的外部存储是用于共享配置(如密钥等)的更好解决方案。 - Tim Lewis
2
是的,我同意Tim Lewis的观点,你永远不应该将环境变量放入版本控制中。 - Adam
显示剩余11条评论

13
当克隆laravel项目时最重要的事情是先运行composer update命令,然后执行composer installcomposer install命令会为该laravel应用程序安装所有所需的依赖项。
我克隆laravel项目所采取的步骤需要使用php artisan key:generate命令。在运行此命令后,我可以在我的.env文件中看到更新的APP_KEY=base64:xxxxxxxxxxxxxxxxxxxx

3
1)composer update 2)composer install 3)php artisan key:generate这个方法对我有效,谢谢。 - Damilare Koiki
使用全栈 Laravel 应用程序,需要执行以下步骤:1)git clone 2)composer update 3)composer install 4)php artisan key:generate 5)php artisan migrate --seed 6)npm install 7)npm run dev。 - Nilpo
@Nilpo composer update 可能会更改 Composer 本身的版本,这可能会导致问题 - 因此在仍在使用旧代码且所需的 Composer 版本已在项目配置中固定的情况下,请谨慎使用... - Peter Kionga-Kamau

8
如果您需要手动生成密钥,可以在任何启用Laravel/artisan的php cli中使用php artisan key:generate --show来执行此操作(据说这不会修改任何现有设置)。然后,您可以在配置文件中使用该密钥字符串(无论您如何保存您的机密信息)。也就是说,您不需要在正在设置的服务器上运行php artisan key:generate(如果您要将Docker镜像部署到像Heroku或AWS App Runner这样的容器主机上,则这可能很有用)。

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