Laravel Lumen 函数 env() 有时返回 null

问题描述 投票:0回答:1

我正在使用 Lumen 6.2.0 开发 api,它获取带有某些参数和令牌的 GET 请求。当它获取参数时,它以某种方式处理它,然后使用我的 .env 文件中的密钥进行编码,然后将结果与请求提供的令牌进行比较,如果比较结果为 true,则用户通过身份验证,否则他不是。所以问题是有时 env() 函数返回 null。这种情况并不经常发生,就像 15 个请求中只有 1 个一样,但这对我来说仍然是一个严重的问题。 我用谷歌搜索了很多,但发现的方法很少。首先,我发现 env() 函数应该只在配置文件中调用,并且由于 Lumen 没有配置目录和我创建的配置文件,但问题仍然相同。第二个建议是专门针对 Laravel 的 -

php artisan config:clear
php artisan config:cache
但 Lumen 没有这样的命令,尽管我运行了
php artisan cache:clear
命令没有效果。所以这是我的代码:

.env 文件

APP_NAME=Example
APP_ENV=local
APP_KEY=ApPkEyHeRe
APP_DEBUG=true
APP_URL=https://example.com
APP_TIMEZONE=UTC

LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=dbname
DB_USERNAME=dbuser
DB_PASSWORD=dbpass

CACHE_DRIVER=file
QUEUE_CONNECTION=sync

VK_APP_SECRET=SoMeFaNcYkEy

config/config.php

<?php

return [
    'vk_app_secret' => env('VK_APP_SECRET'),
    'events_per_page' => 16
];

UsersController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class UsersController extends Controller
{
    public function check(Request $request) {
        $query_params = $request->all();
        
        $sign_params = [];
        foreach ($query_params as $name => $value) {
          if (strpos($name, 'vk_') !== 0) {
            continue;
          }
          $sign_params[$name] = $value;
        }
        
        ksort($sign_params);
        $sign_params_query = http_build_query($sign_params);
        $secret = config('config.vk_app_secret');
        $hash_hmac = hash_hmac('sha256', $sign_params_query, $secret, true);
        $base_encode = base64_encode($hash_hmac);
        $trim_chars = strtr($base_encode, '+/', '-_');
        $sign = rtrim($trim_chars, '=');
        $status = $sign === $query_params['sign'];
        
        return json_encode($status);
    }
}

我还记录了该算法的每一行,并注意到一个有趣的事情,失败的情况在日志行之前包含

[date] production.INFO:
前缀,以及每个成功的情况
[date] local.INFO:
所以也许它以某种方式影响 env() 函数?我也不明白为什么当我有
APP_ENV=local

时它有时会记录为生产

laravel lumen phpdotenv
1个回答
0
投票

您需要在bootstrap/app.php

中注册您的配置文件
/*
|--------------------------------------------------------------------------
| Register Config Files
|--------------------------------------------------------------------------
|
| Now we will register the "app" configuration file. If the file exists in
| your configuration directory it will be loaded; otherwise, we'll load
| the default version. You may register other files below as needed.
|
*/

$app->configure('config');
© www.soinside.com 2019 - 2024. All rights reserved.