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>
结果将是 appidOfUserJohn
和 appsecretOfUserjohn@example.com
。
在我的 .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>
结果将是 appidOfUserJohn
和 appsecretOfUserjohn@example.com
。