我已经用谷歌搜索和 stackoverflowed(如果可以的话)来解决这个问题,但找不到足够简洁的答案:(一些参考文献:Laravel 4:当使用 Config::set 更改 auth.model 时,Auth::user() 不起作用 https://stackoverflow.com/questions/23848397/laravel-4-when-using-configset-to-change-auth-model-then-authuser-not-wor , Laravel 5.2 如何在中间件中使用 config::set https://stackoverflow.com/questions/38638237/laravel-5-2-how-to-use-configset-in-middleware)
如何在运行时成功设置变量两次Config::set()
在 Laravel 5.2.* 中?
这是我试图实现的目标的示例:
我有两张桌子companies
and users
(他们都使用 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
如果随请求发送的令牌是针对User
.
如果有人可以提供帮助,至少了解这是否可能,我将不胜感激。
如果需要提供更多解释,我愿意这样做。