1

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

App_id: 12345
App_secret: abc123

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

App_id: 45678
App_secret: abc456

有没有办法根据用户在文件中拥有if/else功能?env

4

2 回答 2

3

是的,这是可能的,但不在.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 步:运行中间件

如果您需要在所有 Web 路由中为用户设置此配置,您可以添加$middlewareGroupsapp/Http/kernel.php. 这会将中间件应用于内部的所有路由web.php

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

第 5 步:测试

例如,myAuth:user()->name是“John”,myAuth: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

于 2019-06-17T04:56:39.547 回答
0

.env只能存储键值。

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

于 2019-06-17T04:03:39.817 回答