Laravel 5.2 基于用户的动态环境变量

Laravel 5.2 dynamic environment variables based on user

在我的 .env 文件中我有两个变量

App_id: 12345
App_secret: abc123

但我想知道是否有一种方法可以让用户 userNo2 登录后使用

App_id: 45678
App_secret: abc456

有没有办法在基于用户的 env 文件中具有 if/else 功能?

.env只能存储key-value。

由于 .env 始终由配置使用,您可以使用 Config::set('app.id', 45678); 在 运行 时改变环境。您可以将代码放在您的中间件中,请求结束后该值将恢复为默认值。

是的,这是可能的,但不在 .env 文件中。相反,您可以将逻辑移至中间件:

第 1 步:将默认值添加到应用程序配置

打开您的 app/config/app.php 并将您的默认值添加到现有数组。

<?php

return [
    'APP_ID' => '45678',
    'APP_SECRET' => 'abc456',
    ...
];

第 2 步:创建新的中间件

php artisan make:middleware SetAppConfigForUserMiddleware

将文件编辑成如下所示:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Config;

class SetAppConfigForUserMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
         $authorizedUser = Auth::user();

        if (!App::runningInConsole() && !is_null($authorizedUser)) {
            Config::set('app.APP_ID', 'appidOfUser' . $authorizedUser->name);
            Config::set('app.APP_SECRET', 'appsecretOfUser' . $authorizedUser->email);
        }
        return $next($request);
    }
}

第 4 步:运行 您的中间件

如果您需要在所有网络路由中为用户设置此配置,您可以添加到 app/Http/kernel.php 中的 $middlewareGroups 数组。这会将中间件应用于 web.php.

内的所有路由
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        ...
        \App\Http\Middleware\SetAppConfigForUserMiddleware::class,        
    ],

第 5 步:测试

例如,我的 Auth:user()->name 是“John”,我的 Auth:user()->email 是“john@example.com”

如果你把这个放在你的 resources/views/home.blade.php

App Id Of User <code>{{config('app.APP_ID')}}</code>
App Secret Of User <code>{{config('app.APP_SECRET')}}</code>

结果将是 appidOfUserJohnappsecretOfUserjohn@example.com