编程语言
首页 > 编程语言> > php-在函数中两次使用Config :: set()的方式

php-在函数中两次使用Config :: set()的方式

作者:互联网

我已经用谷歌搜索和stackoverflowed(如果可以的话),但是找不到一个简洁的答案:(一些参考:Laravel 4: when using Config::set to change auth.model then Auth::user() not work,Laravel 5.2 how to use config::set in middleware)

如何在Laravel 5.2.*中使用Config :: set()在运行时成功设置两次变量?

这是我尝试实现的示例:

我有两个表公司和用户(它们都使用JWTAuth从不同的路由登录).现在,我想在此路由Route :: get(‘/ computers’)上获取所有计算机记录.

现在的问题是,我想使用相同的中间件来执行此操作,但是我想确保所有这些用户(即公司或用户)都经过身份验证之后才能访问此资源

这是我尝试在中间件中使用Config :: set()的尝试:

//all.auth middleware
public function handle($request, Closure $next)
{
    Config::set('auth.providers.users.model', \App\Company::class);
    Config::set('jwt.user', \App\Company::class);

      //check if the request is for company
    if($company = JWTAuth::toUser(($request->has('token')) ? $request->token : $request->bearerToken())) 
    {
        return ['COMPANY' => $company];
    }

    //Unfortunately its not company, lets try users

    Config::set('auth.providers.users.model', \App\User::class);
    Config::set('jwt.user', \App\User::class);

    if($user = JWTAuth::toUser(($request->has('token')) ? $request->token : $request->bearerToken())) 
    {
        return ['USER' => $user];
    }
    throw new NotFoundHttpException('Your account could not be found.');
    ...............
}

现在,我注意到的行为是,它成功地将JWT所使用的模型更改为Company,但并未将其更改为User,以防随请求一起发送的令牌是针对User的.

如果有人可以帮助我,我将不胜感激,至少了解这是否可能.

If there is a need to provide more explanations, I am ready to do that.

解决方法:

多次设置配置值可以按预期工作.代码无法按预期运行的原因是,第一次使用JWTAuth外观背后的服务使用这两个配置参数的当前值进行了解析.以后更改它不会有任何影响.

为了实现您想要的,您需要使Laravel的服务容器使用新的配置值重新创建服务.为此,您需要做两件事.

首先,从外观中删除解析的实例,以便下次使用该实例时,它将从服务容器中获取服务的新实例:

JWTAuth::clearResolvedInstances();

然后从容器中删除服务实例,以便需要使用新的配置值再次创建它:

App::forgetInstance('tymon.jwt.auth');

在设置新的配置值后添加这两行,下次使用JWTAuth Facade时,应使用新的设置.

标签:laravel,laravel-5,laravel-5-2,jwt,php
来源: https://codeday.me/bug/20191111/2021803.html