我正在使用Lumen 6.2.0开发API,它可以获取带有特定参数和令牌的GET请求。当它得到参数时,它以某种方式处理它,然后用我的.env文件中的密钥进行编码,然后将结果与请求提供的令牌进行比较,如果比较结果为真,则用户被认证,否则他没有。所以问题是有时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:
前缀在log的行之前,和每个成功的情况[date] local.INFO:
所以也许它影响了env()函数以某种方式?我也不明白为什么当我有APP_ENV=local
时,它有时会记录为生产
1条答案
按热度按时间p3rjfoxz1#
您需要在bootstrap/app.php中注册配置文件