ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-11 18:29:14  阅读:354  来源: 互联网

标签:laravel laravel-5 laravel-5-2 jwt php


我已经用谷歌搜索和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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有