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

eyh26e7m  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(160)

我正在使用Lumen 6.2.0开发API,它可以获取带有特定参数和令牌的GET请求。当它得到参数时,它以某种方式处理它,然后用我的.env文件中的密钥进行编码,然后将结果与请求提供的令牌进行比较,如果比较结果为真,则用户被认证,否则他没有。所以问题是有时env()函数返回null。这并不经常发生,就像15个请求中的1个,但对我来说仍然是一个严重的问题。我在谷歌上搜索了很多,但只找到了几个方法。首先,我发现env()函数应该只在配置文件中调用,因为Lumen没有配置目录和配置文件,所以我创建了它,但问题仍然是一样的。第二个建议是专门针对Laravel的-php artisan config:clearphp 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:前缀在log的行之前,和每个成功的情况[date] local.INFO:所以也许它影响了env()函数以某种方式?我也不明白为什么当我有APP_ENV=local时,它有时会记录为生产

p3rjfoxz

p3rjfoxz1#

您需要在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');

相关问题