Laravel 5.2 基于用户的动态环境变量
Posted
技术标签:
【中文标题】Laravel 5.2 基于用户的动态环境变量【英文标题】:Laravel 5.2 dynamic environment variables based on user 【发布时间】:2019-10-30 14:56:45 【问题描述】:在我的 .env 文件中,我有两个变量
App_id: 12345
App_secret: abc123
但我想知道是否有一种方法可以让用户 userNo2
登录然后它会改为使用
App_id: 45678
App_secret: abc456
有没有办法根据用户在env
文件中添加if/else 功能?
【问题讨论】:
不,你不能。您应该为每个用户使用数据库。.env file
仅在开发环境和生产环境之间更改值时使用
如果您正在尝试这种情况,请尝试使用一个包来存储价值,并且包名称是STORAGE
,因为如果您登录以在存储中存储价值并且仅在此包使用缓存和存储价值时获取价值在缓存中一次去数据库,其他时间从缓存中获取值试试这个
这是向users
表添加其他列并将该信息存储在那里的完美方案。
【参考方案1】:
是的,这是可能的,但不在.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
。
【讨论】:
几天来我一直在寻找关于在运行时更改配置的直接答案!感谢您的这篇文章! 欢迎您@Bart Mommens。希望对你有帮助【参考方案2】:.env
只能存储key-value。
因为.env
总是被配置使用,你可以使用Config::set('app.id', 45678);
在运行时改变环境。您可以将代码放在中间件中,请求结束后该值将恢复为默认值。
【讨论】:
以上是关于Laravel 5.2 基于用户的动态环境变量的主要内容,如果未能解决你的问题,请参考以下文章