【问题标题】:"php artisan key:generate" gives a "No application encryption key has been specified." error“php artisan key:generate”给出“未指定应用程序加密密钥”。错误
【发布时间】:2019-02-27 19:19:45
【问题描述】:

我有一个克隆的 laravel 应用程序,但是当我尝试通过 php artisan key:generate 生成一个 APP_KEY 时,它给了我一个错误:

In EncryptionServiceProvider.php line 42:
No application encryption key has been specified.

这很明显,因为这正是我想要创造的。有人知道如何调试这个命令吗?

更新:用这个帖子修复它laravel 4: key not being generated with artisan

如果我在我的 .env 文件中填写 APP_KEY php artisan key:generate 就可以了。但是通过laravel new 新创建的应用程序删除了APP_KEY 可以运行php artisan key:generate 而不会因为某种原因出现问题。

由于某种原因 php artisan key:generate 认为它需要一个 app_key 而它不需要。它也不会执行任何其他命令,它们都错误“未指定应用程序加密密钥”。

【问题讨论】:

  • 你在使用 laravel 4 吗?
  • @sumitsharma composer.json 说laravel/framework: 5.6.*

标签: php laravel key laravel-artisan


【解决方案1】:

检查您的.env 文件。存在吗?

【讨论】:

  • 是的,我刚刚编辑了我的帖子以获取更多详细信息。
【解决方案2】:

php artisan key:generate 需要一个现有的密钥才能工作。将 APP_KEY 填入 32 个字符,然后重新运行命令使其生效。

编辑:通过 laravel new 创建的带有已删除 APP_KEY 的应用程序可以运行 php artisan key:generate 而不会出现问题。

一年后编辑: 真正的问题在于增加了 2 个提供者服务。 boot() 函数写得不好,这会导致问题。仍然不确定为什么它不起作用,但我会尝试为以后可能遇到相同问题的人解决这个问题。

有问题的两个文件

<?php

namespace App\Providers;

use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Routing\ResponseFactory;

class ResponseServiceProvider extends ServiceProvider
{
    public function boot(ResponseFactory $factory){
        parent::boot();
        $factory->macro('api', function ($data=null, $code=null, $message=null) use ($factory) {
            $customFormat = [
                'status' => 'ok',
                'code' => $code ? $code : 200,
                'message' => $message ? $message : null,
                'data' => $data
            ];

            if ($data instanceof LengthAwarePaginator){
                $paginationData = $data->toArray();
                $pagination = isset($paginationData['current_page']) ? [
                    "total" => $paginationData['total'],
                    "per_page" => (int) $paginationData['per_page'],
                    "current_page" => $paginationData['current_page'],
                    "last_page" => $paginationData['last_page'],
                    "next_page_url" => $paginationData['next_page_url'],
                    "prev_page_url" => $paginationData['prev_page_url'],
                    "from" => $paginationData['from'],
                    "to" => $paginationData['to']
                ] : null;

                if ($pagination){
                    $customFormat['pagination'] = $pagination;
                    $customFormat['data'] = $paginationData['data'];
                }
            }

            return $factory->make($customFormat);
        });
    }

    public function register(){
        //
    }
}
<?php

namespace App\Providers;

use App\Http\Controllers\Auth\SocialTokenGrant;
use Laravel\Passport\Bridge\RefreshTokenRepository;
use Laravel\Passport\Bridge\UserRepository;
use Laravel\Passport\Passport;
use Laravel\Passport\PassportServiceProvider;
use League\OAuth2\Server\AuthorizationServer;

/**
 * Class CustomQueueServiceProvider
 *
 * @package App\Providers
 */
class SocialGrantProvider extends PassportServiceProvider{
    /**
//     * Bootstrap any application services.
//     *
//     * @return void
//     */
    public function boot(){
        parent::boot();
        app(AuthorizationServer::class)->enableGrantType($this->makeSocialRequestGrant(), Passport::tokensExpireIn());
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register(){
    }

    /**
     * Create and configure a SocialTokenGrant based on Password grant instance.
     *
     * @return SocialTokenGrant
     */
    protected function makeSocialRequestGrant(){
        $grant = new SocialTokenGrant(
            $this->app->make(UserRepository::class),
            $this->app->make(RefreshTokenRepository::class)
        );
        $grant->setRefreshTokenTTL(Passport::refreshTokensExpireIn());
        return $grant;
    }
}

【讨论】:

    【解决方案3】:

    php artisan key:generate 是一个在 .env 文件中创建 APP_KEY 值的命令。

    当你运行 composer create-project laravel/laravel 命令时,它会在 .env 文件中生成一个 APP_Key,但是当你通过 git 签出一个新分支或克隆一个新项目时, .env 文件将不包含,所以你有运行工匠密钥:生成以创建新的 APP_KEY。

    你改变了你的问题。在这种情况下,您可以尝试一下。 php工匠密钥:生成 php工匠配置:缓存

    【讨论】:

    • 问题是.env 文件的命令错误而不是给我app_key。出于某种奇怪的原因,它认为它需要一个应用程序密钥来创建一个新密钥。这不是真的,因为一个新的项目能够创建一个 app_key 没有另一个存在。
    【解决方案4】:

    如果您没有vendor 文件夹,那么,

    1) 安装作曲家依赖

    composer install
    

    2) 需要使用命令生成应用密钥APP_KEY

    php artisan key:generate
    

    3) 在代码编辑器中打开项目,将 .env.example 重命名为 .env 并将数据库名称、用户名、密码修改为您的环境。

    4) php artisan config:cache 使更改生效。

    【讨论】:

    • 我愿意。 composer install 安装所有依赖项,然后由于没有 APP_KEY 而出错。 Generating optimized autoload files &gt; Illuminate\Foundation\ComposerScripts::postAutoloadDump &gt; @php artisan package:discover Script @php artisan package:discover handling the post-autoload-dump event returned with error code 1 In EncryptionServiceProvider.php line 42: No application encryption key has been specified.
    • 我的数据库名称、用户名和密码都正确。 (用新项目检查)
    猜你喜欢
    • 2017-12-04
    • 2019-03-29
    • 2021-10-24
    • 2021-04-11
    • 2021-06-26
    • 2021-01-04
    • 2021-02-28
    • 2020-12-10
    相关资源
    最近更新 更多