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

标签 php laravel laravel-5 laravel-5.2 jwt

对于这个问题,我用 google 和 stackoverflow(如果可以的话)进行了搜索,但找不到足够简洁的答案:(引用:Laravel 4: when using Config::set to change auth.model then Auth::user() not workLaravel 5.2 how to use config::set in middleware)

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

这是我尝试实现的示例:

我有两个表 companiesusers(他们都使用 JWTAuth 从不同的路由登录)。现在我想在这条路线上获取所有 computers 记录 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 以防 token 随请求是针对用户

如果有人能提供帮助,我将不胜感激,至少要了解这是否可能。

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

最佳答案

多次设置配置值按预期工作。您的代码无法按预期工作的原因是 JWTAuth facade 背后的服务仅在您第一次访问它时使用这两个配置参数的当前值解析一次。稍后更改它不会有任何影响。

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

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

JWTAuth::clearResolvedInstances();

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

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

在设置新配置值后添加这两行,下次使用 JWTAuth facade 时它应该使用新设置。

关于php - 在函数中两次使用 Config::set() 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42251056/

相关文章:

php - Laravel:检查 MySQL 查询是否有结果

laravel - 动态更改 Auth 的模型

php - 如何修复 'SQLSTATE[42S22]: Column not found: 1054 Unknown column ' 中的 'where clause' id' (SQL : select * from `users` where `id` = 0 limit 1)'

php - Laravel:可选的路由前缀参数

php - 这种功能背后可能有什么实用的想法?

php - 使用jquery替换特定的tr内容

php - 用户取消时 Laravel 社交名流错误

php - Laravel Eloquent : multiple select and where clause query

php - 拉维尔 5 : Get all passed data in view template

validation - 验证 .csv 文件时出现 Laravel MIME 问题